我正在考虑更新现有网站以使用SignalR。我的网站轮询第三方服务以进行数据更改,对其进行一些魔术,客户每隔几分钟轮询一次,以便通过任何更新刷新其视图。
SignalR似乎是消除客户端轮询的好方法,但我想知道SignalR如何处理丢弃和放大重新连接的连接,特别是关于可能已暂停一段时间的移动网络应用程序。它会自动协商并排队在此期间遗漏的任何更新,还是客户端需要在这些情况下从头开始重新同步?我看了,但找不到任何关于此的文档,所以我们将不胜感激。
答案 0 :(得分:10)
所有这一切都是可能的,因为客户端会跟踪它看到的最后一条消息ID。如果它碰巧错过了消息,它将在下次返回服务器时获取它们(询问自上次看到的所有消息)。
默认情况下,SignalR的服务器端将消息存储在内存中(并且每隔几秒就会清除一次),但如果您正在考虑客户端,可以将其更改为持久存储到某个持久性存储(请参阅IMessageStore)离线赶上。
当SignalR将内容存储在内存中时,您甚至可以在自己的应用逻辑中自行保留消息。这实际上取决于应用程序。
我们尚未为移动客户端添加任何特殊支持,但您可以将消息ID保留在移动客户端所需的任何本地存储中。
这些细节不是很具体,但你想做的就是使用SignalR。
答案 1 :(得分:0)
阅读Understanding and Handling Connection Lifetime Events in SignalR,尤其是以下部分:
该文件于2014年编写,基本上废除了2011-2012时代许多错误或不完整的StackOverflow SignalR相关问题/答案。