我正在使用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
答案 0 :(得分:0)
Hub类中的ConnectionMapping实例不会在不同的SignalR服务器实例之间同步。您需要使用永久外部存储,例如数据库或Windows Azure表。有关详细信息,请参阅此链接:
http://www.asp.net/signalr/overview/hubs-api/mapping-users-to-connections