2017-08-23 5 views
1

Ich habe eine Crossbar.js-Implementierung, bei der Daten zwischen Client (Website) und Server (Node.js) über einen Crossbar-Websocket-Server gesendet werden. Beide Seiten verwenden Autobahn.JS, um eine Verbindung zum Crossbar-Server herzustellen.Autobahn.JS löscht Verbindung

Die Verbindung funktioniert einwandfrei, aber es scheint, dass sowohl der Client als auch der Server die Verbindung zu zufälligen Zeitpunkten trennen und wiederherstellen. Dies geschieht etwa einmal pro zwei Minuten. Ich sah auch, dass die Verbindungsabfälle nicht gleichzeitig auf beiden Seiten stattfanden. Dies brachte mich auf die Idee, dass das Problem auf der Autobahn-Implementierung liegt, die ich auf beiden Seiten nutze (was für Client und Server ungefähr gleich ist).

Unten ist die Methode, die ich verwende, um eine Verbindung mit dem Crossbar-Server von Node.js herzustellen. Die Version für den Browser ist fast identisch. Ich habe nur das Abonnement geändert und die Variablen const und let in var geändert.

Ich kann den Teil im Code nicht sehen, der Fehler verursacht und den Verbindungsabbruch verursacht. Diese

ist, was die Konsole Ausgänge:

Autobahn closed! 
Reason: 
lost 
Details: 
{ 
    reason: null, 
    message: null, 
    retry_delay: 1.4128745255660942, 
    retry_count: 1, 
    will_retry: true 
} 

Autobahn closed! 
Reason: 
lost 
Details: 
{ 
    reason: null, 
    message: null, 
    retry_delay: 1.2303848117273903, 
    retry_count: 1, 
    will_retry: true 
} 

Da die retry_count Variable ist immer 1, ich glaube, die Verbindung zwischen diesen Tropfen wiederhergestellt wird. Diese

ist, was die Crossbar-Server-Ausgänge:

2017-08-23T10:46:34+0200 [Router  10622] session "1355162039012002" left realm "SMDC" 
2017-08-23T10:46:35+0200 [Router  10622] session "2006451409833362" joined realm "SMDC" 
2017-08-23T10:46:37+0200 [Router  10622] session "2006451409833362" left realm "SMDC" 
2017-08-23T10:46:37+0200 [Router  10622] session "224071819838749" joined realm "SMDC" 

Da der Crossbar-Server ist in der Lage, die Abschaltungen und Verbindungen zur Liste, ich glaube nicht, Crossbar das Problem ist.

Ich hoffe, dass jemand die Einsicht hat, die mir hilft :)

Antwort

2

Das ist wirklich nicht wie ein Problem klingen, die mit Autobahn.js zu tun hat (oder Crossbar.js für diese Angelegenheit). Es scheint eher ein Problem mit den Browser- oder TCP-Timeout-Spezifikationen zu sein.

Inaktive Verbindungen können irgendwann beendet werden. Es scheint, als ob eine Software oder ein Gerät, das an dieser Verbindung beteiligt ist, festgestellt hat, dass sie zu lange inaktiv ist und sie daher schließt. Normalerweise ist das eine gute Sache. Sie wollen nicht, dass tote Verbindungen tagelang ungenutzt bleiben und TCP so konzipiert wurde.

Jetzt sprechen wir über Lösungen. Es ist eigentlich ziemlich einfach. Sie möchten die Verbindung aufrecht erhalten, indem Sie alle X Sekunden eine Nachricht senden. Wenn Sie beispielsweise alle 30 Sekunden einen Herzschlag oder einen Ping senden, würden Sie den Browser, das Client- oder Serverbetriebssystem und alle anderen dazwischen liegenden Geräte vom Beenden der Verbindung trennen, weil sie zu lange inaktiv war.

Wenn Sie absolut sicher sein wollen, dass die Verbindung wegen zu langer Leerlaufzeiten beendet wird, sollten Sie sich Wireshark ansehen. Wenn Sie sich die rohen Pakete ansehen, die tatsächlich über die Leitung gesendet werden, finden Sie schnell die genaue Begründung dafür, dass sie beendet wird.