Edge unterbricht WinSockVerbindung
- javascript
- node.js
Hallo,
ich brauch mal wieder Eure Hilfe:
In meinem PC betreibe ich einen NodeServer und Edge. Beide sind verbunden mit WinSocket - also eine dauerhafte Verbindung. Der Server unterbricht WinSocket NICHT - es läuft dauerhaft.
Aber der Browser Edge - so scheint mir - unterbricht die Verbindung nach einer relativen kurzen Zeit. Wie kann ich das ändern?
Mit freundlichen Grüßen
Effel
Hallo effel,
du meinst WebSocket? Von WinSocket habe ich noch nichts gehört, ist das eine Library? Die bekanntesten Libs für WebSockets sind Socket.IO und - nur serverseitig - das in Node integrierte WS.
Ich habe bisher wenig mit Websockets gemacht, aber ein experimenteller Chat mit nativen Websockets (in Chrome) und WS (in Node) war dabei. Verbindungsabbrüche sind mir da nicht aufgefallen, aber ich weiß auch nicht, was Du mit "kurze Zeit" meinst.
Grundsätzlich - ja - Websockets können abbrechen und man muss sich um die Verbindungswiederherstellung kümmern. Diesen Teil habe ich aber noch nie behandeln müssen, weil ich noch keine langlaufenden Websocket-Verbindungen hatte.
Mozilla hat eine Liste mit Tools zu Websockets.
Rolf
Hallo effel,
Rolfs Hinweis auf Reconnect-Logik ist richtig, aber vorher kannst du das Ganze eingrenzen. Ein Kandidat: Eine Verbindung ohne Datenverkehr wird irgendwo dazwischen gekappt. Router mit NAT-Tabelle, Proxys und Reverse Proxys haben Leerlauf-Timeouts, bei nginx stehen standardmäßig 60 Sekunden (proxy_read_timeout). Hast du so etwas vor dem Node-Server?
Abhilfe ist ein Heartbeat. Der Browser kann selbst keine Ping-Frames senden, also schickst du per setInterval alle 20 bis 30 Sekunden eine kleine Nachricht, die der Server ignoriert. Mit ws geht serverseitig auch ws.ping().
Zweiter Kandidat: Edge legt Tabs im Hintergrund schlafen und drosselt Timer. Die Einstellung heißt Schlafende Tabs; zum Testen kannst du sie ausschalten.
Um zu sehen, wer die Verbindung beendet, logge im onclose-Handler event.code und event.wasClean. 1006 bedeutet, dass die Verbindung abgebrochen ist, ohne dass ein Close-Frame kam.
Gruß