我正在评估SignalR的中等负载Web应用程序.
我们期待~500 msgs/sec,这对SignalR来说应该不是问题.
但是,我们担心这个解决方案的可靠性.我们的环境存在问题网络,客户端丢失网络连接约30秒并不罕见.是否有任何机制可以确保一旦客户端重新连接,它将获取在其脱机时间内发送的所有消息?
谢谢!
Ken*_*ith 15
处理此问题的一种相当简单的方法是为每条消息分配一个随每条消息递增的ID.客户端需要跟踪他收到的最新消息,重新连接后只需将该消息ID发送给服务器; 然后服务器需要将所有丢失的消息发送到客户端.实施起来应该相当简单.
编辑:我认为你不必在服务器上保持任何真实的状态 - 我认为几乎所有的状态都可以推送到你的数据存储区或你的客户端.客户端将发送它收到的最后一条消息的ID或时间戳:
$.connection.myHub.server.updateMe(lastMessageId);
您需要某种支持数据存储 - 因此当服务器收到updateMe()
消息时,它会对数据库进行查询并提取ID大于刚收到的ID的所有行.它会将这些返回给客户端,作为其UpdateMe()
方法返回值的一部分.然后它会尝试通过调用客户端上的方法来传递任何与通常相同的新消息.
至于无状态是SignalR的目标:我无法对此发表评论,除了观察我无法想象任何合理复杂的实际应用程序不需要做某种支持数据存储,无论是在SignalR上或者其他一些框架(WCF,XSockets等)没什么区别.
归档时间: |
|
查看次数: |
7529 次 |
最近记录: |