【发布时间】:2013-10-25 14:59:56
【问题描述】:
我有以下 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,因为调用时没有请求。我想解决这个问题的唯一方法就是使用组。
【问题讨论】:
-
您好我有一个类似的问题 - 我正在研究连接、组状态和 REDIS 背板之间的关系。 David Fowler 说 signalR 是无状态的,所以我担心这是我需要自己跟踪/存储/广播的东西......
-
你必须将你的
Connections对象存储在Redis中,所以所有服务器都可以访问同一个列表
标签: c# asp.net-mvc-3 mono redis signalr-hub