当客户端短时间脱机并丢失某些消息时,如何使用信号r处理客户端视图同步?

问题描述 投票:0回答:1

我正在Web api中使用SignalR为我的客户端应用程序(移动和网络)提供实时功能。一切正常,但有些事情让我有些担心:

当后端发生不同的情况时,客户端会更新。例如,当客户端之一对将由SignalR通知的资源执行CRUD操作时。但是,当客户端(例如,移动应用程序)发生故障并且设备数据连接断开时,会发生什么?

[可能发生另一个客户端对资源进行了任何操作,并且当SignalR广播消息时,它没有到达该客户端的情况。因此,该客户端将具有旧的视图状态。

正如我读过的,似乎没有办法知道所有客户是否已发送和接收消息。因此,除了检查网络状态并在发生这种情况时完全重新加载资源列表之外,还有什么方法可以确保所有客户端上的消息同步均已正确完成?]

asp.net asp.net-core .net-core signalr signalr-hub
1个回答
0
投票

正如您所建议的,如果需要,ASP NET Core SignalR负责管理消息缓冲的应用程序。

如果出现最终一致的视图是个问题(例如,因为操作的顺序很重要),并且完全重装被证明是一项昂贵的操作,则您可以尽可能早地管理一些持久的消息事件队列因此(最好是进行完全重新加载),然后从消息总线和事件源中获取一个页面,并以“傻瓜经纪人/智能消费者”样式的方式在客户端上承担责任。

这与您的情况不完全匹配,但应归功于应得的功劳,这里有一个经过深思熟虑的示例来处理SignalR事件的排队:https://stackoverflow.com/a/56984518/13374279您必须对其中的一些内容进行适应并给数字顺序赋予排队的事件。

初始状态加载和任何后续事件都可以附加汇总版本;在客户端从SignalR接收事件的任何时间,它都可以将其当前已知状态与接收到的状态进行比较,并确定它是否错过了事件,无论是由于断开连接还是集线器连接延迟或在首次获取后启动而导致的延迟;如果客户端的版本已过期且在队列的深度之内,则可以向服务器发出请求以将事件重播到该连接,以使客户端恢复同步。

了解即时一致性与最终一致性可能有助于制定计划。希望这会有所帮助!

© www.soinside.com 2019 - 2024. All rights reserved.