登录
首页 >  Golang >  Go问答

在Go中如何在http.ListenAndServe之外处理http请求?

来源:stackoverflow

时间:2024-03-20 09:00:33 453浏览 收藏

在 Go 中使用 HTTP 服务器时,处理请求的方式通常是通过 `http.ListenAndServe` 函数。然而,如果希望在 `http.ListenAndServe` 函数之外处理请求,就需要使用其他方法。本文将探讨如何实现这一目标,并提供一种将响应写入器放入队列中以便稍后拉取并用于返回响应的解决方案。

问题内容

我正在 go 中设置一个 http 服务器,告诉服务器使用 putrequestonqueue 函数处理所有请求:

http.listenandserve(":6776", *handler)
http.handlefunc("/", putrequestonqueue)

putrequestonqueue 的作用是将响应编写器放入队列中,以便在将来的某个时间将其拉出并用于返回响应。

func putRequestOnQueue(w http.ResponseWriter, r *http.Request){
    RequestQueue.Put(responseWriter)
}

但是,一旦 responsewriter 超出范围,服务器就会返回 200。我想它会这样做,因为它计算出“哦,你告诉我要处理这个请求的函数刚刚失去了编写器,所以我只会回吐 200。”

但我不想要这种行为。我希望能够在我选择时从另一个函数回写。有没有办法可以写回另一个函数的响应,而服务器不会过早返回 200?


解决方案


一旦处理程序返回,服务器就会发送回复/状态。你需要类似的东西:

func putRequestOnQueue(w http.ResponseWriter, r *http.Request){
    RequestQueue.Put(responseWriter)
    waitForResponse()
}

换句话说,在响应准备好之前,putrequestonqueue 不应返回。例如,您可以使用通道或其他任何方式来执行此等待。

但是请注意,这不是很惯用的 go。在 go 中,我们不像其他语言那样做那么多异步模式,因为 goroutine 很便宜。每个 http 处理程序都是 is already called in a separate goroutine,因此您不妨使用处理程序来完成工作,而不是将工作分派到其他地方

好了,本文到此结束,带大家了解了《在Go中如何在http.ListenAndServe之外处理http请求?》,希望本文对你有所帮助!关注golang学习网公众号,给大家分享更多Golang知识!

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