我有以下的Hub片段與SignalR,Redis背板和單個服務器一起工作。SignalR OnConnected與多個服務器和Redis背板
public abstract class HubBase : Hub { private readonly static ConnectionMapping Connections = new ConnectionMapping(); public override Task OnConnected() { Connections.Add(Context.User.Identity.Name, Context.ConnectionId); return base.OnConnected(); } }
我存儲的用戶連接到一個靜態變量,所以我可以的ConnectionId映射到用戶名和我能消息特定用戶以後。
我的問題是,OnConnected函數是否會在SignalR場中的所有服務器上調用?我測試了它,並從外觀上看,它只在客戶端連接的服務器上被調用。
如果它沒有在所有服務器上調用,那麼處理這種情況的建議方法是什麼?
編輯:思考這個現在我意識到我的示例代碼可能有一個嚴重的缺陷。如果在另一臺服務器上也調用了OnConnected方法,那麼顯然Context.User.Identity.Name將不會被設置,因爲沒有請求隨呼叫一起發送。我想解決這個問題的唯一方法就是使用組。
你好我有一個類似的問題 - 我期待在連接,組的狀態和Redis的背板之間的關係。 David Fowler指出signalR是無狀態的,所以我擔心這是我需要跟蹤/存儲/廣播自己的東西... – penderi
您必須將Redis中的Connections對象存儲在Redis中,因此所有服務器都可以訪問相同的列表 – Julien