Mam koncentrator z metodą o nazwie po stronie klienta. Ta metoda uruchamia zegar z delegatem, który działa co 10 sekund. Ponieważ nie ma sensu utrzymywać tego delegata, jeśli nikt nie jest podłączony do koncentratora, chcę sprawdzić, czy wszyscy użytkownicy są nadal połączeni z wewnątrz delegata, zanim przełożę go ponownie. Czy jest jakiś sposób to zrobić?SignalR - Sprawdzanie, czy użytkownik jest nadal podłączony
Odpowiedz
Prawdopodobnie najczęściej używanym rozwiązaniem jest utrzymanie zmienną statyczną zawierającą użytkowników aktualnie podłączonych i nadrzędne OnConnect
i OnDisconnect
lub wykonawczych IDisconnect
w zależności od wersji, którego używasz.
byłoby zaimplementować coś takiego:
public class MyHub : Hub
{
private static List<string> users = new List<string>();
public override Task OnConnected()
{
users.Add(Context.ConnectionId);
return base.OnConnected();
}
//SignalR Verions 1 Signature
public override Task OnDisconnected()
{
users.Remove(Context.ConnectionId);
return base.OnDisconnected();
}
//SignalR Version 2 Signature
public override Task OnDisconnected(bool stopCalled)
{
return base.OnDisconnected(stopCalled);
}
// In your delegate check the count of users in your list.
}
Od http://forums.asp.net/t/1829432.aspx/1?How+do+I+get+list+of+connected+clients+on+signalr+
IHubContext context = GlobalHost.ConnectionManager.GetHubContext<MyHub>();
context.Clients.notify("Hello world");
więc powinieneś być w stanie uzyskać context.Clients.Count.
Ten wpis odwołuje się także do wiki, który ma wiele dobrych informacji. Możesz spróbować użyć przykładów OnConnected/OnDisconnected do śledzenia użytkowników, a gdy dojdziesz do zera, zatrzymaj połączenie.
Dzięki za sugestię, ale staram się robić to z wewnątrz koncentratora ... czy nadal będzie działać? – edobry
Jeśli zapiszesz ConnectionId w swojej bazie danych, można to sprawdzić:
var heartBeat = GlobalHost.DependencyResolver.Resolve<ITransportHeartbeat>();
var connectionAlive = heartBeat.GetConnections().FirstOrDefault(c=>c.ConnectionId == connection.ConnectionId);
if (connectionAlive.IsAlive)
{
//Do whatever...
}
Musisz dodać 'using Microsoft.AspNet.SignalR.Transports' –
Też nie powinno to. Transport jest w Zgromadzeniu Głównym ... Bummer! Zobacz: https://msdn.microsoft.com/en-us/library/microsoft.aspnet.signalr.transports.transportmanager%28v=vs.118%29.aspx?f=255&MSPPError=-2147217396 –
- 1. Sprawdzanie, czy użytkownik nadal jest uwierzytelniany w angularfire2
- 2. Sprawdzanie, czy istnieje użytkownik mysql
- 3. Sprawdź, czy mongoDB jest podłączony
- 4. Parse.com - Inny użytkownik jest już podłączony do tego facebooka id
- 5. Sprawdzanie, czy użytkownik Django ma ustawione hasło
- 6. Jak sprawdzić, czy klient ElasticSearch jest podłączony?
- 7. Zwiększ ASIO: Jak serwer może wiedzieć, czy klient jest nadal podłączony?
- 8. Czy skrypty PHP nadal działają, nawet jeśli użytkownik zamknął przeglądarkę?
- 9. Czy rmic jest nadal potrzebny?
- 10. Czy COM + jest nadal zalecany?
- 11. Czy nadal potrzebny jest ActionBarSherlock?
- 12. ustawienie niewidocznego przycisku Androida, ale nadal ma onClick Listener podłączony
- 13. signalR:/signalr/hubs nie jest generowany
- 14. Jak sprawdzić, czy zestaw słuchawkowy jest podłączony, czy nie?
- 15. Czy istnieje sposób sprawdzenia, czy komponent reagowania nie jest podłączony?
- 16. Sprawdzanie, czy użytkownik zmienił wartość pliku cookie, ręcznie
- 17. Sprawdzanie, czy użytkownik odgrywa rolę w asp.net mvc Identity
- 18. Sprawdzanie SSRS, czy użytkownik w grupie przy użyciu niestandardowego zestawu
- 19. Poinformowany, kiedy kabel sieciowy jest podłączony/podłączony do Wi-Fi
- 20. SignalR: $ .connection jest niezdefiniowane
- 21. Jak sprawdzić, czy użytkownik Django jest nadal zalogowany tylko po stronie klienta?
- 22. Sprawdzanie, czy zmienna POST [] jest adresem IP?
- 23. Czy hasOwnProperty nadal jest używane z instrukcjami dla..in?
- 24. sprawdzić, czy użytkownik jest zalogowany użytkownik kontroli ASP.NET MVC
- 25. Czy sprawdzanie poprawności JavaScript jest złe?
- 26. Sprawdzanie, czy urządzenie to iPad
- 27. Sprawdzanie, czy przycisk NSButton jest wyłączony drawRect
- 28. Czy bezpiecznie jest nadal używać ASIHTTPRequest?
- 29. Czy Nad morzem nadal jest ważna opcja?
- 30. ASP.NET MVC - czy IsPostBack nadal tu jest?
Widziałem to w innych miejscach, po prostu liczyłem na lepszy sposób. Dzięki, spróbuję tego! – edobry
Czy są jakieś problemy dotyczące współbieżności z wieloma wątkami próbującymi uzyskać dostęp do pojedynczego zasobu? –
To nie tylko nie zadziała niezawodnie, ponieważ trwający model koncentratora, przełamuje możliwość skalowania go za pomocą płyty montażowej. Jedyną prawdziwą odpowiedzią jest śledzenie statusu online we współdzielonej pamięci podręcznej, np. Redis lub appfabric. – Bon