2012-10-04 2 views
8

Ich benutze SignalR (0.5.3) Hubs für eine Chat-App, wo jeder Tastendruck an den Server (in der DB gespeichert), an alle Clients und einen Rückgabewert (a String-Token der Art) wird vom Server zurückgesendet.SignalR Verbindung Handhabung auf App Pool Recycling

Es funktioniert gut, bis der App-Pool recycelt, dann stoppt die Weiterleitung der Tastenanschläge an alle Clients (weil der Speicherstatus verloren geht, nehme ich an) 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 Serverunverfügbarkeit/Verzögerung aufgrund App-Pool-Recycling kennen, den Benutzer eine Weile warten und dann den Vorgang bei Wiederverbindung fortsetzen?

Antwort

4

Es gibt zwei Möglichkeiten.

Für 0.5.3 können Sie erkennen, wenn der Client in "Reconnecting" oder "getrennt" geht und den Benutzer darüber informieren, dass es Serverprobleme gibt. Denken Sie daran, dass der Client in den meisten Fällen nicht weiß, dass die Verbindung getrennt ist, wenn der Server einfach nicht mehr funktioniert.

ODER

Wenn Sie auf die nächste Version warten (1.0alpha) werden wir für Sie diese von der Masse kümmern. 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 Cases wie einen App Pool Recycle.

Hoffe, das hilft!

+0

Auf Optionen 1: Sie haben Recht, der Client erfährt erst nach einer längeren Verzögerung (Timeout), dass die Verbindung über die Reconnection/Disconnected Events nicht funktioniert, aber ich werde es trotzdem versuchen. – Nick

+0

@ Taylor Mullen - Hallo, bin ich richtig in der Annahme, dies bedeutet, dass ab 0.5.3 wenn signalr server weggeht, der Client stecken bleiben kann versuchen, die Verbindung bis zu einem Timeout wiederherzustellen, und es gibt keine Ereignisse auf der Clientseite, die sein können verwendet, um dies im Moment zu erkennen? Cheers Will – Will

+0

@Will das ist teilweise richtig. In 0.5.3 erhalten Sie KEINE spezifischen Ereignisse wie "nowReconnecting", aber Sie können erkennen, dass SignalR versucht, sich über das stateChanged-Ereignis erneut zu verbinden. Wenn wir in den Wiederverbindungszustand gehen, wird das stateChanged-Ereignis ausgelöst und der neue Verbindungsstatus wird wieder hergestellt. Es gibt auch keine Zeitüberschreitung auf dem Client, es wird versuchen, für immer wieder zu verbinden. –