2012-07-16 91 views
10

我剛開始測試SignalR以監視應用程序。我有一個控制檯,客戶端可以撥打Hub。我注意到,每當客戶端創建Connection.Hub.Start()時,它會在服務器中創建一個新的Hub實例,我需要隨時刷新控件,因此我不希望它爲每個控件創建新的Hub。爲所有客戶端創建相同的SignalR Hub

有沒有辦法爲所有的客戶端創建單個Hub,或者我失去了一些東西?

回答

18

爲每個請求創建一個Hub實例,就像在WebForms中爲每個請求創建一個ASP.NET Page實例,爲ASP.NET MVC中的每個請求創建一個Controller或爲每個請求創建一個WCF服務實例使用InstanceMode.PerCall時的服務請求。

如果要維護Hub請求/實例之間的共享狀態,您需要使用靜態字段或其他更高級的狀態共享形式(例如依賴注入的單例)。

+0

謝謝,這很清楚。在每次調用中,服務器完成請求的工作並完成。但在這裏我有一種情況,它必須持有客戶端連接來推送他們的數據,否則SinalR如何維護所有連接的客戶端,如果每個呼叫都有一個新的集線器。 – Wasim 2012-07-16 20:34:38

+0

集線器是一個抽象層,位於SignalR的低層連接方面之上,並以更簡單的每個請求實例執行模型向您提出請求。如果你想在較低層工作,那麼直接使用PersistentConnection類。集線器及其方法實際上是通過HubDispatcher(它是一個PersistentConnection子類)調用的。這是一個更加困難的層面,這就是爲什麼Hubs抽象存在的原因。 – 2012-07-16 21:11:15

相關問題