我有以下 Hub 片段与 SignalR、Redis 背板和单个服务器一起使用。
公共抽象类 HubBase : Hub { 私有只读静态 ConnectionMapping Connections = new ConnectionMapping(); 公共覆盖任务 OnConnected() { Connections.Add(Context.User.Identity.Name, Context.ConnectionId); 返回 base.OnConnected(); } }
我将正在连接的用户存储在一个静态变量中,这样我就可以将 connectionId 映射到用户名,并能够稍后向特定用户发送消息。
我的问题是,会在 SignalR 场中的所有服务器上调用 OnConnected 函数吗?我对其进行了测试,从外观上看,它只在客户端连接的服务器上被调用。
如果没有在所有服务器上调用它,处理这种情况的推荐方法是什么?
编辑:现在考虑到这一点,我意识到我的示例代码可能存在严重缺陷。如果在另一台服务器上也调用了 OnConnected 方法,那么显然不会设置 Context.User.Identity.Name,因为调用时没有请求。我想解决这个问题的唯一方法是使用组。