2013-04-18 10 views
5

Mam projekt MVC z wieloma stronami.Ponowne użycie tego samego połączenia w signalR podczas przeglądania różnych stron

Mam długi proces, który aktualizuje klienta o jego postępie. Jednak ta aktualizacja jest wysyłana tylko do jednego klienta, zamiast do wszystkich.

Clients.Client(ConnectionId).sendMessage(msg); 

W moim layout.cshtml, to w jaki sposób mogę podłączyć do koncentratora

var serverHub = $.connection.notifier; 
    window.hubReady = $.connection.hub.start(function() { }); 

Problem jest, kiedy należy przejść do innej strony, nie mogę odbierać wiadomości z signalr, ponieważ identyfikator połączenia zmienił się.

W jaki sposób powinienem rozwiązać ten problem, aby mój hub z sygnalizatorem wciąż mógł wysyłać wiadomości do pojedynczego klienta, podczas gdy klient nawiguje od strony do strony.

Odpowiedz

5

Będziesz chciał utworzyć mapowanie serwerów użytkowników do identyfikatorów połączeń. Patrz: SignalR 1.0 beta connection factory.

Będziesz chciał pozwolić użytkownikom pozostać przy zdarzeniu OnDisconnected, a gdy połączą się z innym ID połączenia, możesz kontynuować przesyłanie danych do nich.

Więc proces myślowy może wyglądać następująco:

  1. załadowaniu strony, połączenie SignalR jest tworzony
  2. Gdy połączenie jest w pełni rozpoczął wywołanie => TryCreateUser (Zwraca użytkownika, czy istniał lub został stworzony).
  3. długi proces Bieg Rozpoczyna
  4. Client zmienia strony -> Połączenie SignalR przystanków
  5. Nowa strona ładunki, nowe połączenie SignalR jest tworzony
  6. Gdy połączenie jest w pełni rozpoczęła sprawdzić, czy masz plik cookie, sesji, albo jakiś rodzaj danych reprezentujących, kim jesteś => TryCreateUser (userData) (zwraca użytkownika, który utworzyłeś na ostatniej stronie).
  7. Dane są przesyłane dalej do użytkownika.

Uwaga: jeśli wziąć podejście uwierzytelniania trzeba będzie być uwierzytelniony przed rozpoczęciem połączenia, a dane nie mogą ulec zmianie w trakcie trwania połączenia SignalR, może być tworzone/modyfikowane podczas połączenia tylko jest w stanie odłączenia.

+0

AM w obliczu tego samego problemu, na stronie nawigacji. Co się stanie, jeśli zakładka pozostanie taka sama, a tylko widok uzyska zmianę? Gdy nastąpi przekierowanie, nowe wygenerowałem. – bilal

Powiązane problemy