当前位置:首页 > 科技  > 软件

深入理解Go标准库-http server的优雅关闭

来源: 责编: 时间:2023-12-04 09:20:05 358观看
导读还记得怎么启动一个HTTP Server么?package mainimport ( "net" "net/http")func main() { // 方式1 err := http.ListenAndServe(":8080", nil) if err != nil { panic(err) } // 方式2 // server := &http.Serv

还记得怎么启动一个HTTP Server么?Z2m28资讯网——每日最新资讯28at.com

package mainimport ( "net" "net/http")func main() { // 方式1 err := http.ListenAndServe(":8080", nil) if err != nil {   panic(err) }     // 方式2 // server := &http.Server{Addr: ":8080"} // err := server.ListenAndServe() // if err != nil { //  panic(err) // }}

ListenAndServe在不出错的情况下,会一直阻塞在这个位置,如何停止这样的一个HTTP Server呢?Z2m28资讯网——每日最新资讯28at.com

CTRL+C是结束一个进程常用的方式,它和kill pid或者kill -l 15 pid命令本质上没有任何区别,他们都是向进程发送了SIGTERM信号。因为程序没有设置对SIGTERM信号的处理程序,所以系统默认的信号处理程序结束了我们的进程Z2m28资讯网——每日最新资讯28at.com

这会带来什么问题?Z2m28资讯网——每日最新资讯28at.com

在服务器的进程被杀死时,我们的服务器可能正在处理请求并未完成。因此对于客户端产生了一个预期外的错误Z2m28资讯网——每日最新资讯28at.com

curl -v --max-time 4 127.0.0.1:8009/foo* Connection #0 to host 127.0.0.1 left intact*   Trying 127.0.0.1:8009...* Connected to 127.0.0.1 (127.0.0.1) port 8009 (#0)> GET /foo HTTP/1.1> Host: 127.0.0.1:8009> User-Agent: curl/7.86.0> Accept: */*> * Empty reply from server* Closing connection 0curl: (52) Empty reply from server

如果有nginx代理,因为upstream的中断,nginx会产生502的响应Z2m28资讯网——每日最新资讯28at.com

curl -v --max-time 11 127.0.0.1:8010/foo*   Trying 127.0.0.1:8010...* Connected to 127.0.0.1 (127.0.0.1) port 8010 (#0)> GET /foo HTTP/1.1> Host: 127.0.0.1:8010> User-Agent: curl/7.86.0> Accept: */*> * Mark bundle as not supporting multiuse< HTTP/1.1 502 Bad Gateway< Server: nginx/1.25.3< Date: Sat, 02 Dec 2023 10:14:33 GMT< Content-Type: text/html< Content-Length: 497< Connection: keep-alive< ETag: "6537cac7-1f1"

优雅关闭的初步实现

优雅关闭(graceful shutdown)指的是我们的HTTP Server关闭前既拒绝新来的请求,又正确的处理完正在进行中的请求,随后进程退出。如何实现?Z2m28资讯网——每日最新资讯28at.com

本文链接:http://www.28at.com/showinfo-26-37244-0.html深入理解Go标准库-http server的优雅关闭

声明:本网页内容旨在传播知识,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。邮件:2376512515@qq.com

上一篇: 使用Ruff改善Python编程风格

下一篇: Tomcat 配合虚拟线程,一种新的编程体验

标签:
  • 热门焦点
  • K6:面向开发人员的现代负载测试工具

    K6 是一个开源负载测试工具,可以轻松编写、运行和分析性能测试。它建立在 Go 和 JavaScript 之上,它被设计为功能强大、可扩展且易于使用。k6 可用于测试各种应用程序,包括 Web
  • 如何使用JavaScript创建一只图像放大镜?

    译者 | 布加迪审校 | 重楼如果您曾经浏览过购物网站,可能遇到过图像放大功能。它可以让您放大图像的特定区域,以便浏览。结合这个小小的重要功能可以大大改善您网站的用户体验
  • 为什么你不应该使用Div作为可点击元素

    按钮是为任何网络应用程序提供交互性的最常见方式。但我们经常倾向于使用其他HTML元素,如 div span 等作为 clickable 元素。但通过这样做,我们错过了许多内置浏览器的功能。
  • 大厂卷向扁平化

    来源:新熵作者丨南枝 编辑丨月见大厂职级不香了。俗话说,兵无常势,水无常形,互联网企业调整职级体系并不稀奇。7月13日,淘宝天猫集团启动了近年来最大的人力制度改革,目前已形成一
  • 小米公益基金会捐赠2500万元驰援北京、河北暴雨救灾

    8月2日消息,今日小米科技创始人雷军在其微博上发布消息称,小米公益基金会宣布捐赠2500万元驰援北京、河北暴雨救灾。携手抗灾,京冀安康!以下为公告原文
  • 8月见!小米MIX Fold 3获得3C认证:支持67W快充

    这段时间以来,包括三星、一加、荣耀等等有不少品牌旗下的最新折叠屏旗舰都得到了不少爆料,而小米新一代折叠屏旗舰——小米MIX Fold 3此前也屡屡被传
  • 疑似小米14外观设计图曝光:后置相机模组变化不大

    下半年的大幕已经开启,而谁将成为下半年手机圈的主角就成为了大家关注的焦点,其中被传有望拿下新一代骁龙8 Gen3旗舰芯片的小米14系列更是备受大家瞩
  • 回归OPPO两年,一加赢了销量,输了品牌

    成为OPPO旗下主打性能的先锋品牌后,一加屡创佳绩。今年618期间,一加手机全渠道销量同比增长362%,凭借一加 11、一加 Ace 2、一加 Ace 2V三款爆品,一加
  • OPPO K11样张首曝:千元机影像“卷”得真不错!

    一直以来,OPPO K系列机型都保持着较为均衡的产品体验,历来都是2K价位的明星机型,去年推出的OPPO K10和OPPO K10 Pro两款机型凭借各自的出色配置,堪称有
Top