优雅重启以保持连接开放。

9
我确定我看到过用Go编写的一些开源服务器,它能够重启并保持连接。我找不到它来学习这种技术。我知道apache.httpd有“apachectl graceful”,可以重启并保持连接。一般情况下和在Go中如何实现呢?我认为必须进行fork和1个退出、2个exec(新的go应用程序),并通过Fd链接连接。但是在Go中,我只能找到ForkExec函数。我认为需要使用Fork。此外,syscall包文档不是很完整。

优雅重启只是简单地启动新服务器来处理所有新的传入连接,但保持旧服务器处于活动状态,直到完成为现有连接提供服务。它不会尝试在请求过程中将现有连接移交给新服务器。 - Lily Ballard
如果您执行程序,则新程序可能与旧程序共享打开的文件。 - Artem
@LilyBallard 但这需要在后面使用代理服务器或负载均衡器。 - Sergey Ponomarev
@Artem,您是指使用 SO_REUSEPORT 并在同一端口上启动新实例吗? - Sergey Ponomarev
1个回答

7

首先,第一个链接出现了404错误,无法访问Github。但是第二个链接提供了TCP监听器在重启后继续运行的解决方案。我相信类似的技术也可以应用于已打开的TCP套接字。谢谢! - Artem
这是第一篇文章中提到的存储库 https://github.com/pantsing/gograce/tree/master - Sergey Ponomarev
这是第一篇文章中提到的存储库 https://github.com/pantsing/gograce/tree/master - undefined

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接