4

部署在传统 Web 服务器上运行的 Web 应用程序时,通常会在代码更新后重新启动 Web 服务器。由于 HTTP 的性质,这对用户来说不是问题。在下一次请求时,他们将获得最新更新。

但是 WebSocket 服务器呢?如果我重新启动或终止旧进程,所有连接的用户都将断开连接。所以我的问题是,您使用了什么样的策略来顺利部署 WebSocket 服务器?

4

3 回答 3

2

没错,如果服务器重新启动,每个连接的用户都将断开连接。

我认为不太糟糕的解决方案是告诉客户端以客户端的onClose方法重新连接。

于 2012-04-21T12:48:36.980 回答
1

WebSockets 只是一种传输机制。像socket.io 这样的库是建立在该传输之上的——并提供心跳、浏览器回退、优雅的重新连接以及处理实时应用程序中发现的其他边缘情况。

在我们支持 WebSocket 的应用程序中,socket.io 是确保我们的持续部署设置不会破坏用户的活动套接字连接的核心。

于 2012-04-22T16:14:34.680 回答
0

如果客户端直接连接到执行所有套接字网络和应用程序逻辑的服务器,那么是的 - 由于保持连接的 TCP 层,它们将断开连接。

如果您有客户端将连接到的网关,并且该网关应用程序正在另一台服务器上运行,但将与逻辑服务器通信并将消息转发给逻辑服务器,那么逻辑服务器会将它们发送回,网关将发送回客户端响应。使用这样的基础设施,您必须在网关上实现数据包的堆叠,直到它与逻辑服务器重新建立连接。逻辑服务器可能会在重启前通知网关服务器。这样客户端就会有连接,它不会收到任何响应。

或者您可以在客户端重新连接上实现。使用 HTTP,每次您离开时,浏览器实际上都在创建与服务器的套接字连接,传输所有数据并关闭它(在大多数情况下)。然后所有网站数据都是本地的,直到您离开。

使用 WebSockets,它是连续连接,并且请求不会重新连接。这就是为什么当 WebSockets 收到关闭事件时您必须实现简单的机制,您将尝试在客户端定期重新连接。

它更多地基于您的特定需求。

于 2012-04-21T21:58:04.943 回答