2016-07-05 5 views
0

hatte ich einen Blick auf diese Bibliothek von Facebook:Graceful Neustart eines Servers mit aktiven WebSocket-Verbindungen in Go

https://github.com/facebookgo/grace

und einige andere wie diese:

https://github.com/fvbock/endless

That Lassen Sie mich anmutige Neustarts von Go-Servern durchführen, damit ich keine Ausfallzeiten habe und die laufenden Anforderungen, die verhindern, dass Daten beschädigt werden, beenden kann.

Aber ich frage mich, wie dies funktionieren würde, wenn ich aktive WebSocket-Verbindungen dabei hätte? Würde der alte Server nie aufhören zu laufen, da es aktive WebSocket-Verbindungen gibt? Ich interessiere mich nicht allzu sehr für die WebSocket-Verbindungen. Ich sorge mich nur um die normalen Anforderungen, die geliefert werden, bevor ich den alten Server herunterfahre und die neue aktualisierte kompilierte Datei einschalte, die der neuen Logik dient.

Wie verhält sich das mit WebSockets?

Antwort

3

Schreiben Sie die Anwendung zum Behandeln von Wiederverbindungen. Server-Neustarts sind nur ein Grund dafür, dass eine Verbindung unterbrochen wird.

Um einen Server mit Websockets (oder jeder Art langlebiger Verbindung) neu zu starten, starten Sie den neuen Server, hören Sie auf Verbindungen auf dem alten Server und leeren Sie die Verbindungen auf dem alten Server, indem Sie die Verbindungen schließen. Wenn die Anwendung so geschrieben ist, dass sie Wiederverbindun- gen behandelt, sollte der Neustart des Servers für den Benutzer nicht sichtbar sein.

Es ist hilfreich, die Verbindungen zu entleeren, anstatt sie auf einen Schlag zu schließen. Dies verhindert einen Denial-of-Service-Angriff durch Ihre eigenen Clients, wenn diese sich wiederverbinden, authentifizieren, Datenbank nach Nachrichtenrückständen abfragen usw. usw.

Verwandte Themen