我从Facebook看了一下这个图书馆:
https://github.com/facebookgo/grace
还有一些像这样的人:
https://github.com/fvbock/endless
这让我对Go服务器进行了优雅的重启,这样我就没有停机时间,因此我可以完成正在进行的请求,防止数据被破坏等等。
但是我想知道如果我在执行此操作时有活动的WebSocket连接,这将如何工作?由于存在活动的WebSocket连接,旧服务器是否会永远不会停止运行?我不太关心WebSocket连接我只关心在关闭旧服务器之前提供的正常请求,并启动将为新逻辑提供服务的新更新编译文件。
这对WebSockets有何影响?
答案 0 :(得分:4)
编写应用程序以处理重新连接。服务器重新启动只是连接可能被丢弃的一个原因。
要使用websockets(或任何类型的长期连接)重新启动服务器,请启动新服务器,停止侦听旧服务器上的连接,并通过关闭连接来消耗旧服务器上的连接。如果编写应用程序以处理重新连接,则用户不应看到服务器重新启动。
排出连接而不是一下子关闭它们是有帮助的。这可以避免您自己的客户在重新连接,验证,查询数据库以查找邮件积压等时遭受拒绝服务攻击等。