Asp.net
在不同頁面導航時重用 signalR 中的相同連接
我有一個 MVC 項目,有多個頁面。
我有一個長時間執行的過程,它會更新客戶端的進度。但是,此更新僅發送給單個客戶端,而不是廣播給所有客戶端。
Clients.Client(ConnectionId).sendMessage(msg);在我的 layout.cshtml 中,這是我連接到集線器的方式
var serverHub = $.connection.notifier; window.hubReady = $.connection.hub.start(function () { });問題是,當我導航到另一個頁面時,我不再收到來自 signalr 的消息,因為連接 ID 已更改。
我應該如何解決這個問題,以便我的信號器集線器仍然可以向單個客戶端發送消息,而客戶端在頁面之間導航。
您將需要創建使用者到連接 ID 的伺服器映射。請參閱:SignalR 1.0 beta 連接工廠。
您將希望讓您的使用者在 OnDisconnected 事件之後持續存在,並且當他們使用不同的連接 Id 連接時,您可以繼續向他們發送數據。
所以思考過程可能如下:
- 頁面載入,SignalR 連接被實例化
- 連接完全啟動後,呼叫 => TryCreateUser(返回使用者,無論它是否存在或已創建)。
- 長時間執行的過程開始
- 客戶端更改頁面 -> SignalR 連接停止
- 新頁面載入,新 SignalR 連接被實例化
- 連接完全啟動後,查看您是否有 cookie、會話或某種類型的數據來代表您的身份 => TryCreateUser(userData)(返回您在最後一頁創建的使用者)。
- 數據繼續向使用者輸送。
**注意:**如果您採用身份驗證方法,則必須在開始連接之前進行身份驗證,並且該數據在 SignalR 連接的生命週期內不能更改,它只能在連接處於斷開狀態時創建/修改。