如何在jquery cometd中减少触发元/连接侦听器的时间?我有一个信号强度低的情况,我想显示一条消息。但是在进入断开状态之前,连接被挂起了。我提到了文档,但找不到一个好的解决方案。
答案 0 :(得分:1)
CometD客户端应用程序可以通过在/meta/connect
频道上注册监听器来检测与服务器的连接是否中断:
cometd.addListener('/meta/connect', function(m) {
connectionBroken = !m.successful;
});
CometD的工作方式是发送/meta/connect
消息,其周期由服务器timeout
配置参数确定,默认为30秒。服务器"持有"回复,只有在有广播消息传递回客户端时,或者在timeout
过去之后才回复此消息。
上面描述的是"心跳"由CometD实现的机制,并不需要应用程序重新实现另一种心跳机制 - 它不会比CometD更有效。
如果TCP回连被关闭(由客户端,服务器或中间人),则回复正在被保持"通过服务器,客户端应立即检测到它(这取决于客户端实现 - 浏览器可能会延迟此通知),并且CometD将通知上面的监听器。
如果TCP连接是僵尸,那就是数据包被丢弃,没有关闭连接的TCP通知等等,那么CometD最多等待timeout
+ maxNetworkDelay
(参见{{ 3}}),然后CometD会通知上面的听众。
如果您的应用程序在连接僵尸时发布消息,CometD最多等待maxNetworkDelay
,然后失败消息回调(请参阅https://docs.cometd.org/current/reference/#_javascript_configure)。
不幸的是,僵尸连接是一个真正的难以察觉;但是,通过一些仔细的编码,CometD允许您在maxNetworkDelay
内或多或少地检测它们,混合使用/meta/connect
侦听器和消息回调。
请注意,maxNetworkDelay
太小会导致连接断开时发生大量错误检测。
总而言之,使用/meta/connect
侦听器和消息回调进行精确编码,与调整maxNetworkDelay
配合使用,可以使应用程序能够在没有(太多)错误报告的情况下尽快检测连接问题