为什么cometd取消订阅不起作用?

问题描述:

我们发现了一些棘手的问题。 在我们的前端我们执行以下代码:为什么cometd取消订阅不起作用?

cometd.unsubscribe(subscription); 

但实际上这退订不会发生。

我们有以下配置:

nginxzookepper,2 jetty节点。

当你理解我们使用的cometd作为web套接字库。

步骤来重现错误:

  1. 我们订阅节点#1从CHANNEL_1
  2. CHANNEL_1
  3. 停止节点#1
  4. 取消订阅channel_2

预期结果:

我们订阅chanel_2只

实际结果:

我们订阅chanel_1和chanel_2只有

请分享可能的方式来理解的根本原因和步骤来解决问题。

P.S.在服务器日志我没有看到从通道退订,但我看到它在WS框架的浏览器
附:节点重新连接后,看起来像_clientId发生更改,我们无法退订新的_clientId。我们是否应该在任何回调中取消订阅?

你在做什么,

cometd.unsubscribe(channel);

不退订的正确方法。 正确的方法是:

var subscription = cometd.subscribe(channel, function(message) { ... }); 
... 
cometd.unsubscribe(subscription); 

你必须传递给unsubscribe(...)subscribe(...)返回subscription对象,而不是通道。

这是在细节中CometDdocumentation解释。

+0

我很抱歉。当我写这个问题时我错了。其实我通过订阅方法取消订阅。它在正常情况下工作正常,但在关闭节点时不起作用。 – gstackoverflow

+0

你的问题没有足够的细节来理解你在做什么,什么不工作。欢迎您向https://github.com/cometd/cometd/issues提交问题以及可复制的测试用例。 – sbordet