2016-09-29 2 views
0

wir haben kniffeliges Problem in der Produktion gefunden. Auf dem Frontend führen wir folgenden Code:Warum cometd Abonnement abmelden funktioniert nicht?

cometd.unsubscribe(subscription); 

aber eigentlich diese Abmelde nicht geschieht.

Wir haben die folgende Konfiguration:

nginx, zookepper, 2 jetty Knoten.

Wie Sie verstanden haben, verwenden wir Cometd als Web-Socket-Bibliothek.

  1. wir # 1 bis CHANNEL_1
  2. Stoppknoten # 1
  3. abmelden von Kanal_1
  4. abonnieren Sie channel_2

Voraussichtlich Knoten abonnieren:

Schritte Fehler zu reproduzieren Ergebnis:

wir haben Abonnement nur

tatsächliches Ergebnis chanel_2:

wir haben Abonnement Möglichkeiten chanel_1 und chanel_2 nur

Bitte teilen Sie die Ursache und Schritte zu beheben Problem zu verstehen.

P.S. In Server-Logs sehe ich nicht den Kanal abmelden, aber ich sehe es in ws-Frames im Browser P.S. Sieht aus wie _clientId ändert sich nach dem Knoten erneut verbinden und wir können nicht abmelden mit neuen _clientId. Sollten wir uns bei einem Rückruf abmelden?

Antwort

0

Was machst du,

cometd.unsubscribe(channel);

ist nicht der richtige Weg, sich abzumelden. Der richtige Weg ist:

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

Sie haben die subscription Objekt unsubscribe(...) passieren durch subscribe(...) zurückgegeben, nicht der Kanal.

Dies wird ausführlich in der CometDdocumentation erklärt.

+0

Es tut mir leid. Ich war fehlerhaft, als ich die Frage schrieb. Wirklich übertrage ich das Abonnement, um die Methode abzubestellen. Und es funktioniert im Normalfall korrekt, aber es funktioniert nicht, wenn ich einen der Knoten herunterfahre. – gstackoverflow

+0

Ihre Frage enthält nicht genügend Details, um zu verstehen, was Sie tun und was nicht. Sie können gerne ein Problem an https://github.com/cometd/cometd/issues zusammen mit einem reproduzierbaren Testfall senden. – sbordet

Verwandte Themen