Wir haben eine Knoteninstanz, die etwa 2500 Client-Socket-Verbindungen hat, alles läuft gut, außer gelegentlich dann etwas passiert mit dem Dienst (Neustart oder Failover-Ereignis in azurblau), wenn die Knoten Instanzen wieder auf und alle Socket-Verbindungen versuchen, die Verbindung wieder herzustellen, kommt der Dienst zum Stillstand und das Protokoll zeigt nur wiederholte Socket-Verbindung/Verbindung getrennt. Selbst wenn wir den Dienst stoppen und starten, geschieht das gleiche, wir senden derzeit ein Paket an unsere On-Premise-Server, um die Chrome-Sitzungen des Benutzers zu beenden, dann funktioniert alles gut, wenn sich die Benutzer wieder anmelden. Wir haben die Clients, die gerade mit 'forceNew' verbinden und nur Web-Sockets erzwingen und nicht das Standard-Long-Polling als das Upgrade. Hat jemand das jemals gesehen oder Ideen?nodeJS wird mit Wiederverbindungen nach Neustart bombardiert
Antwort
In Ihrem socket.io-Client-Code können Sie erzwingen, dass die Wiederverbindungen länger verteilt werden. Die beiden Konfigurationsvariablen, die am wichtigsten, hier zu sein scheinen, sind:
reconnectionDelay
Legt fest, wie lange socket.io zunächst warten, bevor ein Reconnect versucht (es von dort wieder aus sollte, wenn der Server ausgefallen ist eine Weile). Sie können dies erhöhen, um es weniger wahrscheinlich zu machen, dass alle versuchen, sich gleichzeitig neu zu verbinden.
randomizationFactor
Dies ist eine Zahl zwischen 0 und 1,0 und standardmäßig auf 0,5. Es bestimmt, wie stark die oben genannte Verzögerung zufällig geändert wird, um zu versuchen, Client-Reconnects zufälliger und nicht alle gleichzeitig zu machen. Sie können diesen Wert erhöhen, um die Zufälligkeit des Neuverbindungstimings zu erhöhen.
Weitere Details finden Sie unter client doc here.
Sie können auch Ihre Serverkonfiguration untersuchen, um zu sehen, ob sie mit einer moderaten Anzahl eingehender Socketanforderungen so skalierbar wie möglich ist. Während niemand erwartet, dass ein Server in der Lage ist, 2500 gleichzeitige Verbindungen gleichzeitig zu bewältigen, sollte der Server in der Lage sein, diese Verbindungsanforderungen in Warteschlange zu stellen und sie so zu bedienen, wie sie Zeit erhält, ohne sofort eine eingehende Verbindung zu versagen, die nicht sofort behandelt werden kann. Es gibt einen wünschenswerten mittleren Grund einiger Anzahl von Verbindungen, die in einer Warteschlange gehalten werden (normalerweise kontrollierbar durch serverseitige TCP-Konfigurationsparameter) und wenn die Warteschlange dann zu groß wird, werden Verbindungen sofort fehlgeschlagen und dann sollte socket.io zurückschalten und es erneut versuchen etwas später. Wenn Sie die oben genannten Variablen anpassen, wird sie vor dem erneuten Versuch länger warten müssen.
Auch ich bin neugierig, warum Sie forceNew
verwenden. Das scheint dir nicht zu helfen. Nur WebSockets zu erzwingen (kein anfängliches Polling) ist eine gute Sache.
- 1. Neustart MC-Server mit Nodejs
- 2. Neustart von nodejs als Prozess in C#
- 3. Neustart Web-Servers, wenn Dateiänderungen Config NodeJS
- 4. Nodejs - Funktionen wird undefiniert nach dem Exportieren
- 5. RX-Beispiel mit Neustart nach 'Erst nach Pause'
- 6. Kubernetes StatefulSets nach Cluster-Neustart
- 7. Neustart IIS nach Stackoverflow Exception
- 8. Warum wird nach dem Stoff Anruf Schlaf benötigt Neustart pg_ctl
- 9. Linux-Umgebungsvariable zurückgesetzt nach Neustart
- 10. Visual Studio 2005-Installationsprogramm wird nach dem Neustart gestartet
- 11. Cassandra-Cluster wird nach dem Neustart nicht wiederhergestellt?
- 12. Windows-Dienst wird nach dem Neustart nicht automatisch gestartet
- 13. webMethods Integration Server wird kurz nach dem Neustart heruntergefahren
- 14. Mysql globalen Parameter wird nach dem Neustart zurückgesetzt
- 15. Sitzung wird nicht nach dem Neustart des Servers zerstört?
- 16. PHP 4 wird keine PHP.ini Änderungen nach Apache Neustart
- 17. Neustart von allem, was nach Änderungen an freetds.conf benötigt wird?
- 18. Android AlarmManager nach dem Neustart
- 19. Android-Anwendung Neustart nach Absturz
- 20. Keep Logs nach Neustart Modul
- 21. Start-Skript zum Neustart der NodeJS-App funktioniert nicht
- 22. NodeJS - Fehlende) nach Argumentliste
- 23. nodejs: fehlt) nach Argumentliste
- 24. Nohup-Job noch nach dem Neustart leben
- 25. Auto-Neustart App nach Markt Update
- 26. Python + Tornado Neustart nach dem Bearbeiten von Dateien
- 27. Ubuntu 14.04 - PM2 Start nicht nach Neustart
- 28. Wie starte ich Azure WebJob mit TimeTrigger nach dem Neustart/Neustart WebApp
- 29. Player kann nicht nach dem Neustart
- 30. Wie Standortaktualisierungen nach einem Neustart erhalten
Wir haben die ForceNew erst kürzlich implementiert, um dies zu beheben. Dies war ein Vorschlag von Microsoft, da wir einen offenen Fall hatten, da unser Knotendienst in Azure gehostet wird. Ich werde Ihren Vorschlag sicher versuchen. – Troy
Wir haben eine Änderung an reconnectionAttempts vorgenommen, sodass der Client die Verbindung nach 5 Versuchen nicht mehr herstellt. Das Problem trat auf, nachdem wir es implementiert hatten, aber das Problem wurde nie behoben. Gestern haben wir die ReconnectionAttempts auf 2 geändert. Ich weiß, Azure verwendet IIS und Iisnode nicht sicher, ob das einen Faktor spielen kann oder nicht. – Troy