2012-04-16 116 views
8

如果同時發生來自不同客戶端的多個請求,則在執行處理程序期間Hub.Context.ConnectionId的值將發生更改。在SignalR中是Hub.Context線程安全嗎?

假設我有2個客戶端與客戶端Ids A和B連接,並且我的Hub上有一個名爲foo()的方法。我向A發送一個請求到調用foo()的服務器,然後在處理來自A的請求時,我發送一個調用foo()的請求。在A的請求Hub.Context.ConnectionId == A的處理開始時,但在方法調用Hub.Context.ConnectionId == B結束時。

我應該複製Hub.Context嗎?我應該在什麼時候這樣做?

回答

7

它不需要線程安全,因爲Hub實例不是靜態的,因此您不需要複製任何內容。

它們是每次調用創建的。所以來自客戶端的每個調用都會創建一個新的Hub實例和HubContext。

+0

我看到了謝謝,我從IHubActivator返回了同一個Hub,現在我已經將它改爲每次都返回一個新的Hub。 – 2012-04-22 18:34:12

0

這不會直接回答你的問題,但我平常的工作流程是當他們第一次連接時在調用者上設置一個值,這可能會完成你所需要的?

Caller.clientId = Guid.NewGuid();