SignalR具有不可靠或暂停和重新连接的连接?
问题描述:
我正在考虑更新现有网站以使用SignalR。我的网站对第三方服务进行了数据更改的轮询,对其进行了一些修改,客户端每隔几分钟就会轮询一次,以便更新其视图。SignalR具有不可靠或暂停和重新连接的连接?
SignalR似乎是消除客户端轮询的好方法,但我想知道SignalR如何处理掉&重新连接的连接,尤其是关于可能已暂停一段时间的移动web应用程序。它会自动协商并排队同时丢失的任何更新,还是客户需要在这些情况下从头开始重新同步?我看了,但无法找到任何文件,所以不胜感激。
答
所有这一切都是可能的,因为客户端跟踪它看到的最后一个消息ID。如果它错过了消息,它会在下一次返回到服务器时得到这些消息(从最后一次看到消息后请求所有消息)。
默认情况下,SignalR的服务器端将消息存储在内存中(并且每隔几秒清除一次),但是如果您考虑客户端正在脱机并且您可以将其更改为持久存储(请参见IMessageStore)赶上。
你甚至可以在自己的应用程序逻辑中坚持自己的消息,而SignalR将内容存储在内存中。这真的取决于应用程序。
我们没有为移动客户端添加任何特殊支持,但您可以将消息ID保存在您的移动客户端所需的任何本地存储中。
这些细节不是很具体,但你想要做的就是所有可能的SignalR。
答
读Understanding and Handling Connection Lifetime Events in SignalR,特别是以下部分:
- How to continuously reconnect - 从断开状态恢复所需;
- How to notify the user about disconnections - 因此,您的应用程序不仅可以通知用户,还可以检测状态更改(断开连接,重新连接,重新连接)以其他方式刷新应用程序的状态。
该文档是在2014年编写的,基本上废弃了许多来自2011-2012年代的错误或不完整的StackOverflow SignalR相关问题/答案。
很酷,谢谢。额外的信用:你能指点我的任何演示应用程序/代码这样做吗? –
不,我不能:)。 SignalR是全新的,我们迄今尚未在移动设备上做很多工作。 – davidfowl
好啊。它是移动的事实并不直接相关,但它可以指望**来自网络的中断(_ *咳嗽* AT&T_),应用程序暂停/终止而不发出警告等。听起来像它有需要的低级别挂钩 - 请求中的ID,IMessageStore - 将自己建立在其他顶部。将分享,如果我可以充分泛化它! –