在Go中正常重启具有活动WebSocket连接的服务器

时间:2016-07-05 01:51:09

标签: go

我从Facebook看了一下这个图书馆:

https://github.com/facebookgo/grace

还有一些像这样的人:

https://github.com/fvbock/endless

这让我对Go服务器进行了优雅的重启,这样我就没有停机时间,因此我可以完成正在进行的请求,防止数据被破坏等等。

但是我想知道如果我在执行此操作时有活动的WebSocket连接,这将如何工作?由于存在活动的WebSocket连接,旧服务器是否会永远不会停止运行?我不太关心WebSocket连接我只关心在关闭旧服务器之前提供的正常请求,并启动将为新逻辑提供服务的新更新编译文件。

这对WebSockets有何影响?

1 个答案:

答案 0 :(得分:4)

编写应用程序以处理重新连接。服务器重新启动只是连接可能被丢弃的一个原因。

要使用websockets(或任何类型的长期连接)重新启动服务器,请启动新服务器,停止侦听旧服务器上的连接,并通过关闭连接来消耗旧服务器上的连接。如果编写应用程序以处理重新连接,则用户不应看到服务器重新启动。

排出连接而不是一下子关闭它们是有帮助的。这可以避免您自己的客户在重新连接,验证,查询数据库以查找邮件积压等时遭受拒绝服务攻击等。