17

我正在考虑将 Web 套接字Netty用于客户端连接到服务器以首先获取一些信息的应用程序。然后,它们由服务器注册,特定客户端信息的任何更改都会触发包含更新信息的客户端通知。在这种情况下,通信首先由客户端发起,然后由服务器发起。因此,Web 套接字似乎适用于这种情况。

但是,在它启动之后,我希望我的客户端能够随时得到服务器的通知。可能是几天后,也可能是几周后。所以,我的问题是使用网络套接字可以实现非常长的连接吗?

谢谢

4

2 回答 2

12

绝对可以,但有几点需要注意。

如果您希望您的连接长时间连续保持活动状态,那么我建议向您的客户端添加一些逻辑,以便在 onclose 事件发生时重新连接(您将需要某种回退以防止在某些情况下出现紧密的重新连接循环)。

您可能还希望每 5 分钟左右发送一条 ping 消息(一条被忽略的简单消息),以防止空闲超时(这可能发生在网络连接的多个位置)。TCP 网络堆栈通常设置为终止已空闲 2 小时的连接,而 ping 消息将使它们保持活动状态。允许浏览器实现对应用程序不可见的 ping 消息,但这是可选的,因此如果您想保证这种行为,您应该在应用程序级别实现您自己的消息。

注意:Ping/Pong 帧是 WebSocket 规范的一部分,但还不能通过 API 获得

于 2012-08-21T14:58:19.223 回答
4

长寿命连接是 WebSocket 的设计目的。根据您的客户端连接方式,这些连接的生命周期可能仍然受到限制,即在零售 DSL 连接上,通常至少每 24 小时强制重新连接一次。

然后,您似乎想要的是在原始 WebSocket(仅提供双向消息传递)之上发布和订阅消息传递模式。看看:http ://wamp.ws (和http://autobahn.ws)。

免责声明:我是 WAMP 和 Autobahn 的原作者,为 Tavendo 工作。

于 2012-08-21T13:40:02.227 回答