javascript - CometD v3.0.9 - 服务器端断开连接未在消息上设置成功标志( channel /元/断开连接)

标签 javascript java jquery cometd bayeux

我们正在将 cometd 从版本 2.5 升级到 3.0.9,但禁用了 websockets。 我们注意到的变化之一是:- 在将消息发布到“/meta/disconnect” channel 之前,org.cometd.server.ServerSessionImpldetach() 方法不再在消息上设置成功标志。从 GitHub cometd 存储库注意到,它已作为 2015 年 10 月 14 日提交的一部分被删除 - 改进了服务器端断开连接的处理(用户 sbordet)。

public void disconnect()
{
    boolean connected = _bayeux.removeServerSession(this, false);
    if (connected)
    {
        ServerMessage.Mutable message = _bayeux.newMessage();
        message.setChannel(Channel.META_DISCONNECT);
        // message.setSuccessful(true);
        deliver(this, message);
        flush();
    }
}

现在,在客户端,我们使用 jquery 与 cometd (jquery.cometd.js) 进行交互。每当我们从服务器端收到 cometd 断开连接消息时,我们就会发出重新连接。在尝试重新连接之前,我们会检查以下情况。

$.cometd.isDisconnected() && (message.channel == "/meta/disconnect" && message.successful)

message.successful 检查失败,因为由于断开连接 API 的更改,它从未在服务器端设置。因此, session 永远不会重新连接/恢复,从而导致服务器根本不知道此 session ,因此服务器端不会将任何服务器推送到客户端服务消息。

我们希望保留此检查,因为在注销期间,此标志已成功设置。在注销期间,我们调用下面的客户端方法,这反过来会导致服务器端(在 BayeuxServerImpl 下)的 DisconnectHandler 被调用。 DisconnectHandler 消息事件在回复消息上将此标志设置为 true。

$.cometd.disconnect()

首先,想要了解当从服务器端发起断开连接时,为什么不再在 cometd 断开消息上设置成功标志(希望它与 DisconnectHandler 行为一致)。其次,是否有可能的替代方案仍然设置此标志,即可以通过客户端或服务器端的覆盖?

最佳答案

从服务器端断开连接消息中删除了成功标志,因为这是一条未经请求的消息,而不是对客户端发起的断开连接的回复,并且需要区分两者。

未经请求的消息没有消息 idsuccessful 字段。

如果服务器断开了客户端的连接,并且您想要重新连接该客户端,只需为 /meta/disconnect channel 注册一个监听器即可。对于未经请求的断开连接和断开连接回复,都会调用监听器,并且您可以根据需要重新handshake()

关于javascript - CometD v3.0.9 - 服务器端断开连接未在消息上设置成功标志( channel /元/断开连接),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39768994/

相关文章:

javascript - 角色替换

javascript - 如何制作自定义可拖动脚本

java - 我如何添加一个数组中的一个数组? & Android 获取请求

javascript - 没有 Node.js 的 Typed.js 安装

jquery - 使用jquery ajax后如何通过选择器获取元素? $.ajax()

javascript - 不等于 couchdb 中的函数错误

java - 尝试检索 PackageInfo 时获取空上下文

java - 动画(偶尔)滞后

javascript - 使用 jQuery 在 Bootstrap Carousel 中的同一张幻灯片上显示多个元素

javascript - 在 AngularJS 中,jquery 附加方法似乎不适用于指令