2016-09-29 31 views
0

我們發現了一些棘手的問題。 在我們的前端我們執行以下代碼:爲什麼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。我們是否應該在任何回調中取消訂閱?

回答

0

你在做什麼,

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