12

假设我的网络连接中断了几秒钟,我错过了一些 SignalR 服务器推送的消息。

当我重新连接网络时,我错过的消息会丢失吗?还是 signalR 处理它们并在我重新连接时将它们推出?

如果它不能处理丢失的消息,那么推荐的确保一致性的方法是什么?

  • 定期(2-3 分钟)轮询检查服务器数据?
  • 以某种方式检测客户端的网络丢失并进行 ajax 调用以获取有关网络恢复的数据?
  • 别的东西?
4

1 回答 1

11

这里有几个想法:

如果您每秒发送的消息不多,请考虑在消息本身中不发送数据。相反,该消息只是对客户端的“ping”,告诉他们尽可能去获取服务器数据。正如您所说,将其与定期民意调查相结合,您可以放心,您不会错过任何消息。他们只是可能会延迟。

如果您要快速发送大量消息,那么为每个消息添加一个顺序 ID 怎么样?想一想 SQL Identity 列。您的客户需要跟踪最近收到的 ID。网络重新连接后,客户端可以请求自 [Last ID] 以来的所有消息。如果收到的消息的 ID 与最近收到的消息不连续,则您知道存在断开连接,可以向服务器询问丢失的信息。

于 2012-04-26T13:04:28.290 回答