首页  >  文章  >  后端开发  >  如何在 Go 中正确关闭后台处理的 HTTP 请求?

如何在 Go 中正确关闭后台处理的 HTTP 请求?

Barbara Streisand
Barbara Streisand原创
2024-10-29 21:19:30934浏览

How to Properly Close an HTTP Request for Background Processing in Go?

如何正确关闭后台处理的请求

简介

响应 HTTP 请求时,您可能需要在后台处理负载同时以非阻塞响应进行响应。这可以通过关闭请求并启动 goroutine 来继续处理来实现。

响应关闭并返回 202 Accepted

在提供的代码示例中,您将状态代码设置为 202 Accepted 以指示该请求被接受以进行后台处理。要正确关闭请求,只需编写 header 并启动 goroutine,如下所示:

<code class="go">func index(w http.ResponseWriter, r *http.Request) {
    w.WriteHeader(http.StatusAccepted)
    go sleep()
}</code>

从请求处理程序返回

一些开发人员建议在编写后从请求处理程序返回header 并启动 goroutine。然而,这不是必需的并且可以省略。从处理程序返回会自动发出请求完成的信号,并释放分配给它的资源。

HTTP Status 200 OK

如果您打算返回 200 OK 状态代码,您可以简单地调用 sleep功能无需设置状态码。如果没有设置 headers,服务器会自动设置 200 OK。

最佳实践

关闭后台处理请求的最佳实践是写入 header 并启动 goroutine,如以下代码所示:

<code class="go">func index(w http.ResponseWriter, r *http.Request) {
    w.WriteHeader(http.StatusAccepted)
    go sleep()
}</code>

从处理程序返回后,请记住避免在并发 goroutine 中使用 http.ResponseWriter 或 httpRequest 值,因为它们可能会被服务器重用。

以上是如何在 Go 中正确关闭后台处理的 HTTP 请求?的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn