目前,我將所有連接的用戶連接ID存儲在數據庫中,方法是將它們映射到實際的應用程序用戶。我在這裏做的很簡單:當OnConnected
事件被觸發時,我將連接ID添加到數據庫中。然後,我會在觸發OnDisconnected
事件時從數據庫中刪除該連接。跟蹤SignalR連接ID以查看它們是否真的存在
但是,在某些情況下(例如,當進程終止等)時,我不會收到斷開連接事件。這使得我的連接表不可靠,因爲我無法確定用戶是否連接到一個或多個客戶端。例如,這裏是代碼我OnDisconnected
方法塊:
HubConnection hubConnection = _hubConnectionRepository.GetAll()
.FirstOrDefault(conn => conn.ConnectionId == connectionId);
if (hubConnection != null)
{
_hubConnectionRepository.Delete(hubConnection);
_hubConnectionRepository.Save();
}
if (!_hubConnectionRepository.GetAll().Any(conn => conn.UserId == user.Id))
{
Clients.Others.userDisconnected(username);
}
正如你看到的,我檢查是否有關聯到該用戶的任何其他連接就在我刪除他/她的當前連接。根據情況,我向所有連接的客戶端發送消息。
我在這裏想要的是這樣的:能夠使用連接ID數組輪詢SignalR系統並取回斷開連接的數據,以便我可以從數據庫中的連接列表中刪除它們。據我與David Fowler的談話記得,今天這是不可能的,但在這種情況下,首選方法是什麼?
嗨,我剛開始使用SignalR並希望做一些涉及跟蹤。我喜歡你的想法。想知道如果在2年之後,這仍然是正確的方式,或者如果現在有更多類似的解決方案可以作爲解決方案。任何人? – 2015-12-10 19:13:18