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