问题 SignalR具有不可靠或暂停和重新连接的连接?


我正在考虑更新现有网站以使用SignalR。我的网站轮询第三方服务以进行数据更改,对其进行一些魔术,并且客户每隔几分钟轮询一次,以便通过任何更新刷新其视图。

SignalR似乎是消除客户端轮询的好方法,但我想知道SignalR如何处理丢弃和重新连接的连接,特别是关于可能已暂停一段时间的移动网络应用程序。它会自动协商并排队在此期间遗漏的任何更新,还是客户端需要在这些情况下从头开始重新同步?我看了,但找不到任何关于此的文档,所以指导将不胜感激。


4588
2017-10-12 14:49


起源



答案:


所有这一切都是可能的,因为客户端会跟踪它看到的最后一条消息ID。如果它碰巧错过了消息,它将在下次返回服务器时获取它们(询问自上次看到的所有消息)。

默认情况下,SignalR的服务器端将消息存储在内存中(并且每隔几秒清除一次),但您可以将其更改为持久存储到某个持久存储(请参阅 IMessageStore如果你正在考虑客户离线和追赶。

您甚至可以在自己的app逻辑中自己保存消息,而SignalR会将内容存储在内存中。这真的取决于应用程序。

我们尚未为移动客户端添加任何特殊支持,但您可以将消息ID保留在移动客户端所需的任何本地存储中。

这些细节不是很具体,但你想做的就是使用SignalR。


10
2017-10-12 16:12



很酷,谢谢。额外的功劳:你能指点我做任何类似的演示应用程序/代码吗? - Joel P.
不,我不能 :)。 SignalR是全新的,我们尚未对移动设备做过多少工作。 - davidfowl
呃,好吧。移动设备与移动设备没有直接关系,但它是您可以使用的设备 指望 来自网络的中断(*咳嗽* AT&T),应用程序暂停/终止而没有警告等。听起来它有必要的低级别挂钩 - 请求中的ID,IMessageStore - 自己构建其余的。如果我可以充分地将其泛化,我将分享! - Joel P.
你有没有为此制作一个简单的通用应用程序?我也在做同样的事情。 - rball


答案:


所有这一切都是可能的,因为客户端会跟踪它看到的最后一条消息ID。如果它碰巧错过了消息,它将在下次返回服务器时获取它们(询问自上次看到的所有消息)。

默认情况下,SignalR的服务器端将消息存储在内存中(并且每隔几秒清除一次),但您可以将其更改为持久存储到某个持久存储(请参阅 IMessageStore如果你正在考虑客户离线和追赶。

您甚至可以在自己的app逻辑中自己保存消息,而SignalR会将内容存储在内存中。这真的取决于应用程序。

我们尚未为移动客户端添加任何特殊支持,但您可以将消息ID保留在移动客户端所需的任何本地存储中。

这些细节不是很具体,但你想做的就是使用SignalR。


10
2017-10-12 16:12



很酷,谢谢。额外的功劳:你能指点我做任何类似的演示应用程序/代码吗? - Joel P.
不,我不能 :)。 SignalR是全新的,我们尚未对移动设备做过多少工作。 - davidfowl
呃,好吧。移动设备与移动设备没有直接关系,但它是您可以使用的设备 指望 来自网络的中断(*咳嗽* AT&T),应用程序暂停/终止而没有警告等。听起来它有必要的低级别挂钩 - 请求中的ID,IMessageStore - 自己构建其余的。如果我可以充分地将其泛化,我将分享! - Joel P.
你有没有为此制作一个简单的通用应用程序?我也在做同样的事情。 - rball


了解和处理SignalR中的连接生命周期事件,尤其是这些部分:

  • 如何连续重新连接  - 要求从断开状态恢复;
  • 如何通知用户断线连接  - 因此,您的应用程序不仅可以通知用户,还可以检测状态更改(断开连接,重新连接,重新连接)以通过其他方式刷新应用程序的状态。

该文件是在2014年编写的,基本上废除了2011-2012时代的许多错误或不完整的StackOverflow SignalR相关问题/答案。


0
2018-02-27 15:47