2016-09-29 7 views
0

私たちは生産上の面倒な問題を発見しました。なぜサブスクリプションからcometd unsubcribeが機能しないのですか?

cometd.unsubscribe(subscription); 

が、実際には、この退会は発生しません。私たちのフロントエンドでは、我々は次のコードを実行 。

nginxzookepper、2 jettyノード:

は、我々は、以下の構成を有しています。

わかりましたとおり、cometdをWebソケットライブラリとして使用しています。バグを再現する

手順:

  1. 我々はCHANNEL_1
  2. から
  3. 停止ノード#1
  4. 退会をCHANNEL_1する#1をノードAに加入するには、期待

をchannel_2を購読します結果:

我々は唯一

実際の結果chanel_2するサブスクリプションがあります。我々は唯一

をchanel_1とchanel_2するサブスクリプションを持っている

は、根本的な原因と問題を解決するための手順を理解するための可能な方法を共有してください。

P.S.サーバログではチャンネルからの登録解除は表示されませんが、ブラウザのwsフレームで確認できます。
P.S.ノード再接続後に_clientIdのように見えて、新しい_clientIdで購読を停止することはできません。コールバックを解除する必要がありますか?何をやっている

答えて

0

cometd.unsubscribe(channel);

が退会する正しい方法ではありません。 正しい方法は次のとおりです。

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

あなたはunsubscribe(...)subscribe(...)、ないチャネルによって返さsubscriptionオブジェクトを渡す必要があります。

詳細は、CometDdocumentationで説明します。

+0

申し訳ありません。私が質問を書いたとき、私は間違っていました。実際には、私はサブスクリプションをメソッドにサブスクリプションを渡します。通常の場合は正しく動作しますが、ノードの1つをシャットダウンした場合には機能しません。 – gstackoverflow

+0

あなたの質問には、あなたがやっていることとうまくいかないことを理解するのに十分な詳細がありません。再現可能なテストケースとともにhttps://github.com/cometd/cometd/issuesに問題を提出することは大歓迎です。 – sbordet

関連する問題