Websockets适应非常长寿的连接吗?

时间:2012-08-21 12:02:21

标签: java websocket netty

我正在考虑将带有Netty的Web套接字用于客户端连接到服务器以获取某些信息的应用程序。然后,它们由服务器注册,并且对特定客户端的信息的任何改变将触发包含更新信息的客户端的通知。在这种情况下,通信首先由客户端启动,后者由服务器启动。因此,网络套接字似乎适应了这种情况。

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

由于

2 个答案:

答案 0 :(得分:10)

当然,但有一些警告。

如果你想让你的连接长时间保持活着,那么我建议你在你的客户端添加一些逻辑来重新连接当onclose事件发生时(你需要某种补偿来防止紧密的重新连接循环情况)。

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

注意:Ping/Pong frames是WebSocket规范的一部分,但尚未通过API提供

答案 1 :(得分:3)

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

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

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