CometD v3.0.9 - 服务器端断开连接未在消息上设置成功标志(通道 /meta/disconnect)
CometD v3.0.9 - server side disconnect doesn't set the successful flag on message (channel /meta/disconnect)
我们正在将 cometd 从版本 2.5 升级到 3.0.9,但禁用了 websockets。
我们注意到的变化之一是:-
org.cometd.server.ServerSessionImpl disconnect() 方法在将消息发布到“/meta/disconnect”频道之前不再在消息上设置成功标志。从 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。因此,会话永远不会重新连接/恢复,从而导致服务器根本不知道此会话,因此,服务器端不会将任何服务器推送到客户端服务消息..
我们想保留这个检查,因为在注销期间,这个标志是成功的set.During注销,我们调用下面的客户端方法,这反过来导致调用服务器端(在 BayeuxServerImpl 下)的 DisconnectHandler . DisconnectHandler 消息事件在回复消息上将此标志设置为 true。
$.cometd.disconnect()
首先,想了解当从服务器端发起断开连接时,为什么不再在 cometd 断开连接消息上设置成功标志(希望它与 DisconnectHandler 行为一致)。其次,是否有可能的替代方法仍然设置此标志,即可以通过客户端或服务器端的覆盖?
successful
标志已从服务器端断开连接消息中删除,因为这是一条未经请求的消息,而不是对客户端发起的断开连接的回复,因此需要区分两者。
未经请求的消息没有消息 id
也没有 successful
字段。
如果服务器断开了一个客户端,而你想重新连接那个客户端,你为 /meta/disconnect
频道注册一个监听器就足够了。对于未经请求的断开连接和断开连接回复,将调用侦听器,如果需要,您可以重新handshake()
。
我们正在将 cometd 从版本 2.5 升级到 3.0.9,但禁用了 websockets。 我们注意到的变化之一是:- org.cometd.server.ServerSessionImpl disconnect() 方法在将消息发布到“/meta/disconnect”频道之前不再在消息上设置成功标志。从 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。因此,会话永远不会重新连接/恢复,从而导致服务器根本不知道此会话,因此,服务器端不会将任何服务器推送到客户端服务消息..
我们想保留这个检查,因为在注销期间,这个标志是成功的set.During注销,我们调用下面的客户端方法,这反过来导致调用服务器端(在 BayeuxServerImpl 下)的 DisconnectHandler . DisconnectHandler 消息事件在回复消息上将此标志设置为 true。
$.cometd.disconnect()
首先,想了解当从服务器端发起断开连接时,为什么不再在 cometd 断开连接消息上设置成功标志(希望它与 DisconnectHandler 行为一致)。其次,是否有可能的替代方法仍然设置此标志,即可以通过客户端或服务器端的覆盖?
successful
标志已从服务器端断开连接消息中删除,因为这是一条未经请求的消息,而不是对客户端发起的断开连接的回复,因此需要区分两者。
未经请求的消息没有消息 id
也没有 successful
字段。
如果服务器断开了一个客户端,而你想重新连接那个客户端,你为 /meta/disconnect
频道注册一个监听器就足够了。对于未经请求的断开连接和断开连接回复,将调用侦听器,如果需要,您可以重新handshake()
。