Constructor OnlineTracker
- Namespace
- UsluzionicaServer.Infrastructure
- Assembly
- UsluzionicaServer.dll
OnlineTracker(RedisConnection, ILogger<OnlineTracker>)
Praćenje online korisnika i njihovih SignalR konekcija.
ZAŠTO OVO MORA U REDIS: SignalR konekcija je vezana za JEDAN proces. Sa dve instance API-ja iza load balancera, Ana je konektovana na instancu A, Marko na instancu B. Kad Marko otvori listu razgovora, njegov zahtev obrađuje instanca B — koja u svojoj memoriji nema pojma o Aninoj konekciji i prikaže je kao offline. Uvek.
Redis drži to stanje van procesa, pa obe instance vide isto.
STRUKTURA: Redis SET po korisniku. usluzionica:online:{userId} → { connectionId1, connectionId2, ... } Skup jer isti korisnik može biti prijavljen sa telefona i sa laptopa istovremeno — offline je tek kad NIJEDNA konekcija ne ostane.
TTL na ključu je zaštita od procesa koji padne: OnDisconnectedAsync se
tada nikad ne izvrši i connectionId bi zauvek ostao u skupu, pa bi korisnik
večno bio „online". TTL se obnavlja pri svakoj registraciji.
FALLBACK: bez Redis-a radi tačno kao pre — ConcurrentDictionary u memoriji. To je ispravno za jednu instancu i drži testove zelenim.
public OnlineTracker(RedisConnection redis, ILogger<OnlineTracker> logger)
Parameters
redisRedisConnectionloggerILogger<OnlineTracker>