为什么cometd取消订阅不起作用?
问题描述:
我们发现了一些棘手的问题。 在我们的前端我们执行以下代码:为什么cometd取消订阅不起作用?
cometd.unsubscribe(subscription);
但实际上这退订不会发生。
我们有以下配置:
nginx
,zookepper
,2 jetty
节点。
当你理解我们使用的cometd作为web套接字库。
步骤来重现错误:
- 我们订阅节点#1从CHANNEL_1
- CHANNEL_1
- 停止节点#1
- 取消订阅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解释。
我很抱歉。当我写这个问题时我错了。其实我通过订阅方法取消订阅。它在正常情况下工作正常,但在关闭节点时不起作用。 – gstackoverflow
你的问题没有足够的细节来理解你在做什么,什么不工作。欢迎您向https://github.com/cometd/cometd/issues提交问题以及可复制的测试用例。 – sbordet