SignalR with Redis将消息发送到特定的ConnectionID

时间:2013-07-29 03:34:52

标签: asp.net-mvc redis signalr signalr-hub backbone.signalr

  

我正在使用SingalR作为我的聊天应用程序。想和Redis一起玩   和SignalR但我找不到一个可以发送msg的工作示例   具体connectionId 。下面的代码适用于单个服务器实例。   但当我把它作为一个带有3个过程的Web Garden时,它就不再像我一样工作了   获取消息的服务器实例找不到connectionId   为该目的地UserId发送消息。

private readonly static ConnectionMapping<string> _connections = new ConnectionMapping<string>();
        public void Send(string sendTo, string message, string from)
        {
            string fromclientid = Context.QueryString["clientid"];

            foreach (var connectionId in _connections.GetConnections(sendTo))
            {
                Clients.Client(connectionId).send(fromclientid, message);

            }

            Clients.Caller.send(sendTo, "me: " + message);

        }

            public override Task OnConnected()
            {
            int clientid = Convert.ToInt32(Context.QueryString["clientid"]);

            _connections.Add(clientid.ToString(), Context.ConnectionId);

            }
  

我使用下面的示例来设置我的框和代码但没有   他们有从一个客户端发送到特定客户端或的例子   特定客户群。

http://www.asp.net/signalr/overview/performance-and-scaling/scaleout-with-redis
https://github.com/mickdelaney/SignalR.Redis/tree/master/Redis.Sample

1 个答案:

答案 0 :(得分:0)

Hub类中的ConnectionMapping实例不会在不同的SignalR服务器实例之间同步。您需要使用永久外部存储,例如数据库或Windows Azure表。有关详细信息,请参阅此链接:

http://www.asp.net/signalr/overview/hubs-api/mapping-users-to-connections