SignalR中的保证交付 [英] Guaranteed delivery in SignalR

查看:13
本文介绍了SignalR中的保证交付的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在为中等负载的Web应用程序评估SignalR。

我们预期为大约500 msgs/秒,这对于SignalR应该不是问题。

但是,我们担心这个解决方案的可靠性。我们的环境有一个有问题的网络,客户端断开网络连接约30秒的情况并不少见。是否有任何机制可以确保一旦客户端重新连接,它就会获得在其脱机时间内发送的所有消息?

谢谢!

推荐答案

处理此问题的一种相当简单的方法是为每条消息分配一个随每条消息递增的ID。客户端将需要跟踪他收到的最新消息,重新连接时只需将该消息ID发送到服务器;然后服务器将需要将所有丢失的消息发送到客户端。应相当简单地实现。

编辑: 我不认为您必须在服务器上维护任何实际状态-我认为几乎所有的状态都可以推送到您的数据存储或您的客户端。客户端将发送它收到的最后一条消息的ID或时间戳:

$.connection.myHub.server.updateMe(lastMessageId);

您可能需要某种备份数据存储-因此,当服务器接收到updateMe()消息时,它将在数据库上执行查询,并取出ID大于刚收到的ID的所有行。它会将这些内容作为其UpdateMe()方法返回值的一部分返回给客户端。然后,它将通过调用客户端上的方法,尝试以正常方式传递任何出现的新消息。

至于无状态是SignalR的目标,我不能对此发表评论,只能说我无法想象任何相当复杂的现实世界应用程序不需要某种形式的后备数据存储,无论它是在SignalR上还是在其他框架(WCF、XSockets等)上。差别不大。

这篇关于SignalR中的保证交付的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆