登录
首页 >  Golang >  Go问答

停止Web服务器后处理请求 - Go

来源:stackoverflow

时间:2024-03-11 08:30:19 461浏览 收藏

小伙伴们对Golang编程感兴趣吗?是否正在学习相关知识点?如果是,那么本文《停止Web服务器后处理请求 - Go》,就很适合你,本篇文章讲解的知识点主要包括。在之后的文章中也会多多分享相关知识点,希望对大家的知识积累有所帮助!

问题内容

我有一个函数,运行时将为用户提供一个 url,用于启动 oauth 流程以与我的客户端进行令牌交换。

我需要运行本地 http 服务器来接受用户的回调。但我不知道如何关闭 http 服务器并关闭该功能并在流程完成后继续。

func OAuth(request *OAuthRequest) {

    http.HandleFunc("/callback", func(w http.ResponseWriter, r *http.Request) {
        w.Write([]byte(`{"response": "unable to handle request"}`))

       // Do something

      // Finish up and shutdown HTTP server
    })

    err := http.ListenAndServe(net.JoinHostPort("","8080"), nil)
    if err != nil {
        log.Fatalln(err)
    }

    fmt.Println("Login at: www.example.com/123abc")

    // Wait for user to finish flow
   
}

  1. 用户调用.oauth()
  2. 本地服务器已启动并公开 /callback
  3. 给用户提供在浏览器中使用的 url
  4. 远程服务器向 localhost/callback 发送回调
  5. 本地 http 服务器处理响应
  6. 工作完成,关闭本地 http 服务器
  7. .oauth() 已完成

正确答案


如果您希望能够关闭 http 服务器,则需要通过 http.Server 创建 http 服务器:

package main

import (
    "context"
    "fmt"
    "net/http"
)

func main() {
    mux := http.NewServeMux()
    srv := http.Server{
        Addr:    "localhost:8080",
        Handler: mux,
    }
    mux.HandleFunc("/callback", func(w http.ResponseWriter, r *http.Request) {
        w.Write([]byte(`{"response": "unable to handle request"}`))
        go srv.Shutdown(context.Background())
    })

    fmt.Println("Login at: www.example.com/123abc")

    if err := srv.ListenAndServe(); err != http.ErrServerClosed {
        panic(err)
    }
}

以上就是本文的全部内容了,是否有顺利帮助你解决问题?若是能给你带来学习上的帮助,请大家多多支持golang学习网!更多关于Golang的相关知识,也可关注golang学习网公众号。

声明:本文转载于:stackoverflow 如有侵犯,请联系study_golang@163.com删除
相关阅读
更多>
最新阅读
更多>
课程推荐
更多>