我们在生产中发现了棘手的问题。 在我们的前端,我们执行以下代码:
cometd.unsubscribe(subscription);
但实际上这个取消订阅并没有发生。
我们有以下配置:
nginx
,zookepper
,2个jetty
个节点。
如您所知,我们使用cometd作为Web套接字库。
重现错误的步骤:
预期结果:
我们只订阅了chanel_2
实际结果:
我们只订阅了chanel_1和chanel_2
请分享可能的方法来了解根本原因和解决问题的步骤。
P.S。在服务器日志中,我没有看到取消订阅频道,但我在浏览器的ws框架中看到它
P.S。在节点重新连接后看起来_clientId
更改,我们无法取消订阅新_clientId
。我们应该取消订阅任何回调吗?
答案 0 :(得分:1)
你在做什么,
#{component.clientId}
不是取消订阅的正确方法。 正确的方法是:
cometd.unsubscribe(channel);
您必须传递var subscription = cometd.subscribe(channel, function(message) { ... });
...
cometd.unsubscribe(subscription);
由unsubscribe(...)
返回的subscription
对象,而不是频道。
CometD documentation中详细说明了这一点。