Architecture · SignalR presence

Presence bằng Redis TTL và heartbeat

Presence bằng Redis TTL và heartbeat Mỗi kết nối là một khoá Redis tự hết hạn sau 90 giây, được instance đang giữ kết nối gia hạn mỗi 30 giây; instance bị kill không gia hạn nên khoá tự biến mất, IsOnlineAsync chỉ coi người dùng online khi còn ít nhất một khoá sống và chỉ phát UserPresenceChanged khi trạng thái đổi. INSTANCE ỨNG DỤNG REDIS SADD EXPIRE MỖI 30S KHÔNG GIA HẠN SMEMBERS EXISTS ĐỔI TRẠNG THÁI Instance AOnConnected · OnDisconnected PresenceHeartbeatWorkerPeriodicTimer · 30 giây Instance B bị killOnDisconnected không chạy Tập kết nối của userpresence:user:{userId}Set · TTL 90 giây Khoá mỗi kết nốipresence:{userId}:{connId}String · TTL 90 giây IsOnlineAsynccòn ≥ 1 khoá sống = onlinekhoá hết hạn: SREM (lazy) UserPresenceChangedtới nhóm tenant Không ai gia hạn thì khoátự biến mất sau tối đa 90 giây,không cần bước dọn dẹp nào Ba tab vẫn chỉ một sự kiện online CHÚ GIẢIThành phầnĐiểm mấu chốtInstance đã chếtGia hạn TTLKhông còn gia hạn © tiennhm