2014-02-05 74 views
1

我想問一下,如果使用SinglR只是爲了瞭解當前用戶是否在線或不在線?SignalR只是用於檢查用戶是否在線

例如我有一個小型網站登錄系統,並在一邊我想顯示登錄成員。

這是使用signalr的好主意嗎?

如果這種情況下,我應該在每一頁上啓動與集線器的連接? (在這種情況下,當用戶在頁面上導航時,將是在集線器上調用的重新連接方法,或OnDisconnected和OnConnected)?

我剛開始使用signalr,所以很好奇ppl的想法。

回答

0

你可以使用SignalR,儘管可能有更好的方法來做到這一點。因此,當用戶登錄,註銷或變爲非活動狀態時 - 您會從客戶端向服務器發送某種指示狀態更改的消息。您可以將該信息存儲在臨時數據庫中,並且每當數據庫中的值發生更改時,都可以使用SignalR將該信息轉發給所有連接的客戶端。

+0

要查看用戶是否在線,您可能需要讓瀏覽器週期性地向服務器發送消息以表明它仍在給定頁面上。這是客戶端到服務器消息/ ping。 SignalR確實擅長相反:服務器到客戶端的消息傳遞。直到最近,這通常需要客戶端進行某種輪詢,但像SignalR和socket.io這樣的庫使得今天更容易。 – halter73

0

當用戶從一個頁面移動到另一個頁面時,Signalr將重新連接。每當用戶登錄到網站時,假設您使用Cookiebase身份驗證,用戶安全詳細信息將保存在cookie中。因此,直到用戶註銷或會話超時,cookie纔會處於活動狀態。所以在這裏對Signalr沒有真正的需求。

+0

嗯,應用程序如何知道用戶是否已註銷?當他登錄時,他記得我,所以是... – Alnedru

0

我一直在調查同樣的事情。從我的研究中,我會說你可以做到這一點,但是我正在研究它是否是最好的方法。我期望很多斷開連接和重新連接。如果您將這些數據保存在數據庫中,則應預計會有很多數據庫流量。如果你只在一臺服務器上,你可以堅持這個在內存中。

還要注意的是ConnectionId隨每個頁面刷新而改變。起初,我認爲這是愚蠢的,因爲我想要連接ID是一致的,所以我可以保持與它的用戶處理。但是,如果您在新選項卡中打開鏈接,然後關閉其中一個鏈接,則必須保持其他連接存儲。如果ID相同,即使其他標籤打開,也會在斷開連接時將其刪除,因此您的用戶將被錯誤地標記爲脫機。

但是,我想到的另一個問題是,如果您只是在單個選項卡中瀏覽網站,則會在每次頁面加載之間斷開連接。所以你可能會遇到連接一致性問題。

我想說在線存在與信號更常用於聊天室或遊戲大廳。所以我會說這是可能的,但是否是一個好的解決方案 - 我不確定。