向在 signalR 中断开连接一段时间的用户发送消息
send a message to a user who has been disconnected for a while in signalR
考虑使用 SignalR 实现消息传递的情况,用户暂时断开连接,您想要再次向她发送她错过的消息。
这是我的简单集线器:
[HubName("ContosoChatHub")]
public class ContosoChatHub : Hub
{
}
然后我广播消息:
var hubContext = GlobalHost.ConnectionManager.GetHubContext<ContosoChatHub>();
hubContext.Clients.All.AddCallForAgent(new { });
我首先想到的是将此添加到您的中心:
private static ConcurrentDictionary<string, Queue<Message>> UnconfirmedMessages;
string
类型将映射用户 ID(用户应该经过身份验证)。
- 每当您向用户发送消息时,您都会将其添加到其队列中
以及。
- 然后 user/client 将向集线器发送确认
使用收到的消息 ID(即:嘿,我收到了消息 1、2、3 和
4).那时您将从队列中删除这些消息。
- 当客户端重新连接时,它会向集线器询问所有未确认的消息。那会让你再次进入第 2 步。
考虑使用 SignalR 实现消息传递的情况,用户暂时断开连接,您想要再次向她发送她错过的消息。
这是我的简单集线器:
[HubName("ContosoChatHub")]
public class ContosoChatHub : Hub
{
}
然后我广播消息:
var hubContext = GlobalHost.ConnectionManager.GetHubContext<ContosoChatHub>();
hubContext.Clients.All.AddCallForAgent(new { });
我首先想到的是将此添加到您的中心:
private static ConcurrentDictionary<string, Queue<Message>> UnconfirmedMessages;
string
类型将映射用户 ID(用户应该经过身份验证)。
- 每当您向用户发送消息时,您都会将其添加到其队列中 以及。
- 然后 user/client 将向集线器发送确认 使用收到的消息 ID(即:嘿,我收到了消息 1、2、3 和 4).那时您将从队列中删除这些消息。
- 当客户端重新连接时,它会向集线器询问所有未确认的消息。那会让你再次进入第 2 步。