gpt4 book ai didi

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

转载 作者:数据小太阳 更新时间:2023-10-29 03:40:27 24 4
gpt4 key购买 nike

我在 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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com