Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/iphone/40.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Signalr 当客户端断开连接时,信号器是否可以将消息排队,并在客户端重新连接时将消息重新发送给客户端?_Signalr_Signalr Hub_Signalr.client_Asp.net Core Signalr_Signalr Backplane - Fatal编程技术网

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方法,将挂起的数据发送到连接的客户

我们目前使用SignalR在UI客户端上从后端接收实时消息。UI客户端在联机并连接到SignalR时接收消息,在断开连接时错过消息(例如:用户关闭了页面,SignalR断开了客户端)。 但是,现在我们需要向用户显示所有消息,包括UI客户端脱机时由SignalR发送的消息。信号员能支持这种情况吗?
该要求类似于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(); }