SignalR-Verbindungsbehandlung beim App-Pool-Recycling

8

Ich benutze SignalR (0.5.3) Hubs für eine Chat-App, wo jeder Tastendruck an den Server gesendet wird (gespeichert in der DB), an alle Clients weitergeleitet wird und ein Rückgabewert (ein String-Token der Art) gesendet wird zurück vom Server.

Es funktioniert gut, bis der App-Pool wiederverwendet wird. Dann werden die Tastatureingaben nicht mehr an alle Clients weitergeleitet (weil der Serverzustand im Speicher verloren geht) und der Server gibt auch keine Werte zurück. An dieser Stelle nehme ich an, dass alle Anfragen über SignalR von IIS in die Warteschlange gestellt und dann verarbeitet werden, sobald der App-Pool wiederverwendet wurde.

Meine Frage ist, wie kann ich mit diesem Szenario umgehen, so dass alle Clients die Serververfügbarkeit / -verzögerung aufgrund des Recyclings des App-Pools kennen, den Benutzer auf eine Weile warten und dann den Vorgang bei der Wiederverbindung fortsetzen?

    
Nick 04.10.2012, 10:00
quelle

1 Antwort

4

Es gibt zwei Möglichkeiten.

Für 0.5.3 können Sie feststellen, wann der Client die Verbindung wieder herstellt oder die Verbindung getrennt wird und dem Benutzer mitteilen, dass Serverprobleme vorliegen. Denken Sie daran, dass der Client in den meisten Fällen nicht weiß, dass die Verbindung unterbrochen wird, wenn der Server einfach nicht mehr funktioniert.

ODER

Wenn Sie auf die nächste Version (1.0alpha) warten, übernehmen wir den Großteil für Sie. Wenn kein Server vorhanden ist, lösen wir ein onConnectionSlow-Ereignis aus, das dazu führt, dass der Client in den Status "Neu verbinden" wechselt (wenn er keine Informationen erhält), bis der Server wieder online ist. Der Client wird auch wissen, ob der Server wegfällt (wir fügen diese Funktionalität hinzu) für Edge-Fälle wie einen App-Pool-Recycling.

Hoffe, das hilft!

    
N. Taylor Mullen 04.10.2012 16:28
quelle

Tags und Links