2016-05-31 8 views
1

Angenommen, ich habe 2 Hubs in meiner SignalR App. Ich verbinde die ConnectionsIds-> userIds auf einem lokalen Cache-Wörterbuch.SignalR: Kann OnDisconnect-Ereignis eines Hubs nur für einen bestimmten Hub aufgerufen werden?

Aktuelle Logik ist wie folgt:

Mit OnConnected -> fügen Sie einen neuen „connectionId UserID“ Eintrag in das Wörterbuch (falls es nicht existiert).

Mit OnDisconnected -> entfernen, dass „connectionId UserID“ Eintrag aus dem Wörterbuch (falls vorhanden)

Gibt es ein Szenario, das Hub1 getrennt werden, während Hub2 in Verbindung bleiben wird?

Wenn ja, ist meine aktuelle Logik fehlerhaft, da sie den Eintrag aus dem Wörterbuch entfernt, obwohl Hub2 noch verbunden ist. Bei der Reparatur muss ich zwei Wörterbücher für jeden Hub verwalten.

P.S. Ich habe mir SignalR-Dokumente für die Handhabung von Verbindungszuordnungen angeschaut und es scheint immer, dass sie ein Wörterbuch pro Hub verwenden. also möchte ich wissen, ob es wirklich notwendig ist.

+1

Hallo Ofir. Nur ein Vorschlag, Sie können prüfen, mit Single-User Groups diese Zuordnung zu halten. Es ist einfacher zu implementieren und Sie müssen sich nicht selbst mit der Pflege eines Wörterbuchs belasten. Check [this] (http://stackoverflow.com/questions/37455608/handling-concurrent-connections-in-siganlr/37458129#37458129) –

+0

Sehr elegante Lösung! Ich denke, ich werde diesen Weg gehen. danke – Ofir

Antwort

1

Gemäß der Dokumentation Signalr teilen Sie eine Verbindung für mehrere Hubs. Wenn Sie also einen Anruf bei OnDisconnect erhalten, sollten alle Ihre Hubs getrennt sein.

SignalR 2.0 wurde aktualisiert, um mehrere Hubs über eine signalläre Verbindung ohne Leistungsverlust zu versorgen.

http://www.asp.net/signalr/overview/guide-to-the-api/hubs-api-guide-server#multiplehubs

+0

Du hast recht, ich habe mir den Code in der HubDispatcher-Klasse angesehen, die Funktion ruft alle Hubs ab und führt das disconnect-Ereignis auf allen verbundenen Hubs aus. – Ofir

Verwandte Themen