Hallo Marvin,
du hast völlig recht: Websocket-Verbindungen werden bei jedem Seitenwechsel geschlossen. Du hast keine Chance das zu verhindern. Punkt.
Es gibt verschiedene Ansätze, um dieses Problem zu umgehen. Eine übliche Variante wäre es, Tools wie Redis zu verwenden, um die Nachrichten, die du deinen Usern schicken möchtest, zu speichern und bei einer Neuverbindung zu schicken. Zusammen mit einem Timeout, versteht sich: wenn der User erst drei Tage später wiederkehrt, will man ja nicht, dass er drei Tage alte Events bekommt.
Eine weitere Möglichkeit ist es, eine SPA zu erstellen. Der User lädt die Seite nicht neu, die Verbindung bleibt weitestgehend bestehen (abgesehen von Verbindungsabbrüchen).
Man kann auch einfach damit leben, dass in dem Augenblick der User halt keine Nachricht bekommt; ob dieser Weg sinnvoll ist, musst du entscheiden, das können wir nicht für dich.
Ein dritter Weg wäre es, Service Workers einzusetzen; hier müsstest du allerdings auf die Push API umsteigen.
Dieses ganze Thema steckt noch ein wenig in den Kinderschuhen (auch wenn es bereits tausendmal besser ist als noch 2011: da habe ich mal einen Websocket-Server in Erlang selber implementiert) und es ist häufig noch Handarbeit notwendig, um zu erreichen, was du möchtest.
Ich hoffe, ich konnte ein paar mögliche Lösungswege aufzeigen; falls nicht, frag nochmal nach.
LG,
CK