作者热门文章
- xml - AJAX/Jquery XML 解析
- 具有多重继承的 XML 模式
- .net - 枚举序列化 Json 与 XML
- XML 简单类型、简单内容、复杂类型、复杂内容
我在 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/
我是一名优秀的程序员,十分优秀!