减少检查 jquery cometd 元连接的时间?

Reduce time to check jquery cometd meta connect?

我们如何减少在 jquery cometd 中触发 meta/connect 侦听器的时间?我有一个信号强度低的场景,我想显示一条消息。但是在 cometd 中,连接在断开连接状态之前被挂起。我参考了文档,但找不到好的解决方案。

CometD 客户端应用程序可以通过在 /meta/connect 频道上注册侦听器来检测与服务器的连接是否中断:

cometd.addListener('/meta/connect', function(m) {
    connectionBroken = !m.successful;
});

CometD 的工作方式是 /meta/connect 消息的发送周期由服务器 timeout 配置参数确定,默认为 30 秒。服务器 "holds" 回复,并且只有在有广播消息要传送回客户端时或在 timeout 过去后才回复此消息。

上面描述的是CometD实现的"heart-beat"机制,应用程序不需要重新实现另一种心跳机制——它不会比CometD的更有效。

如果在服务器 "held" 回复时 TCP 连接关闭(由客户端、服务器或中介关闭),客户端应立即检测到它(这取决于客户端实现 - 浏览器可能会延迟此通知),CometD 将通知上面的侦听器。

如果 TCP 连接是僵尸连接,即丢包,没有连接已关闭的 TCP 通知等,那么 CometD 最多等待 timeout + maxNetworkDelay(请参阅https://docs.cometd.org/current/reference/#_javascript_configure), 那么CometD会通知上面的监听器。

如果您的应用程序在连接处于僵尸状态时发布消息,CometD 最多等待 maxNetworkDelay,然后消息回调失败(参见 https://docs.cometd.org/current/reference/#_javascript_publish)。

不幸的是,僵尸连接真的很难检测;然而,通过一些仔细的编码,CometD 允许您在 maxNetworkDelay 内或多或少地检测它们,混合使用 /meta/connect 侦听器和消息回调。

请注意太小 maxNetworkDelay 会导致大量错误检测断开的连接。

总而言之,使用 /meta/connect 侦听器和消息回调进行精确编码,再加上 maxNetworkDelay 的调整,应该可以让应用程序能够尽快检测连接问题,而不会(太多)虚假报道。