Signalr 当客户端断开连接时,信号器是否可以将消息排队,并在客户端重新连接时将消息重新发送给客户端?
我们目前使用SignalR在UI客户端上从后端接收实时消息。UI客户端在联机并连接到SignalR时接收消息,在断开连接时错过消息(例如:用户关闭了页面,SignalR断开了客户端)。 但是,现在我们需要向用户显示所有消息,包括UI客户端脱机时由SignalR发送的消息。信号员能支持这种情况吗?Signalr 当客户端断开连接时,信号器是否可以将消息排队,并在客户端重新连接时将消息重新发送给客户端?,signalr,signalr-hub,signalr.client,asp.net-core-signalr,signalr-backplane,Signalr,Signalr Hub,Signalr.client,Asp.net Core Signalr,Signalr Backplane,我们目前使用SignalR在UI客户端上从后端接收实时消息。UI客户端在联机并连接到SignalR时接收消息,在断开连接时错过消息(例如:用户关闭了页面,SignalR断开了客户端)。 但是,现在我们需要向用户显示所有消息,包括UI客户端脱机时由SignalR发送的消息。信号员能支持这种情况吗? 该要求类似于UI客户端mesages的持久队列,但我们使用SignalR向所有客户端广播消息。SignalR不支持此方案,您需要自己完成。您需要存储消息并实现一个hub方法,将挂起的数据发送到连接的客户
该要求类似于UI客户端mesages的持久队列,但我们使用SignalR向所有客户端广播消息。SignalR不支持此方案,您需要自己完成。您需要存储消息并实现一个hub方法,将挂起的数据发送到连接的客户端。因此,您需要做的是:
- 使用
选项将数据保存在一些易失性存储器中,这样您就可以查看已发送到客户端的数据并将其删除readby
- 将向客户端发送数据的集线器方法,客户端响应接收到的数据
- Hub方法,该方法将发送客户端断开连接时Hub未发送的所有数据
/**
*连接信号器并获取以前的数据
*/
专用异步连接信号器(){
等待此消息。hubMessageConnection.start()
.然后(()=>{
//注册申请
此.GetDataForThisClientAsync();
}).catch(()=>{
this.onError.emit(WidgetStateEnum.connectError);
});
}
和获取数据的集线器方法:
public async Task<OperationResult> GetNotificationsAsync(Groups groups)
{
IList<MyData> data = await this.DataManager.GetDataForThisClientAsync(groups).ConfigureAwait(false);
if (data.Count != 0)
{
// Send the notifications
foreach (MyData data in datas)
{
await this.BroadcastDataToCallerAsync(data).ConfigureAwait(false);
}
}
return OperationResult.Success();
}
公共异步任务GetNotificationsAsync(组)
{
IList data=wait this.DataManager.getdataforthisclientsync(组).configurewait(false);
如果(data.Count!=0)
{
//发送通知
foreach(数据中的MyData数据)
{
等待此消息。BroadcastDataToCallerAsync(数据)。ConfigureWait(false);
}
}
返回OperationResult.Success();
}