http - 如何在 http.ListenAndServe 处理程序之外编写 http 响应?

标签 http go

我在 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 不应返回。例如,您可以使用 channel 或其他任何方式来进行这种等待。


但是请注意,这不是非常地道的 Go。在 Go 中,我们不像在其他语言中那样做那么多异步模式,因为 goroutines 很便宜。每个 HTTP 处理程序 is already called in a separate goroutine ,所以您不妨使用您的处理程序来完成工作,而不是将工作分派(dispatch)到别处完成

关于http - 如何在 http.ListenAndServe 处理程序之外编写 http 响应?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56031519/

相关文章:

javascript - Stack Overflow 如何在不重新加载页面的情况下通知服务器端事件?我在 Firebug 中看不到任何请求

web-services - 内部 Web 应用程序的自定义 HTTP header

go - “无法评估类型界面中的字段键”访问Go模板中的键

json - 尝试解码映射[优先级]字符串

go - 在 golang 中实现 github.com/jlaffaye/ftp

javascript - 除了黑魔法之外,当通过 http 与 https 获取页面时,还有什么可能导致 js/css 文件包含在其包含的 html 文档中?

Java:ConnectException/无法找到或加载主类

go - 如何从同一 map 内的另一个函数调用存储在 map 中的函数

go - 在 kafka-go 中读取具有特定 ID 的消息

带有 HTTP POST 的 Android JSON ajaxQuery