我还在测试SignalR,但对我来说非常重要的一件事就是消息尽快传到客户端(我正在处理实时股票价格)。
事情是 - 几乎在我尝试的每一个场景下 - 从完全本地到在Azure上运行100个实例(带有背板和所有......),消息从服务器到达的时间随着连接客户端数量的增加,客户端呈指数级增长。
我在Hubs,Persistent Connection,.net客户端,在phantomJS中运行的JS客户端,zombieJS& node.js ...我几乎尝试过几十种配置,但行为总是一样的,这让我得出结论,这是SignalR中固有的东西。
我知道SignalR可以在极少数服务器上处理数千个并发客户端,但如果消息需要几秒钟(在同一个Azure区域内),对我来说没用。
知道可能会减慢消息的速度吗?
由于
答案 0 :(得分:2)
在其横向扩展指南中对此进行了解释:http://www.asp.net/signalr/overview/signalr-20/performance-and-scaling/scaleout-in-signalr
限制
使用背板,最大消息吞吐量低于它 当客户端直接与单个服务器节点通信时。那是因为 背板将每条消息转发到每个节点,因此背板可以 成为瓶颈。这种限制是否是一个问题取决于 应用程序。例如,以下是一些典型的SignalR场景:
- 服务器广播(例如,股票代码):背板适用于此场景,因为服务器控制消息的速率 发送。
- 客户端到客户端(例如,聊天):在这种情况下,如果消息数量与数量一致,背板可能会成为瓶颈 客户;也就是说,如果消息的速率成比例增长 客户加入。
- 高频实时(例如实时游戏):不建议在此方案中使用背板。
因此,使用背板会造成延迟,并且取决于您正在执行的应用程序类型......这可能不是正确的选择。
很久以前我放弃了SignalR,专注于后面有正确排队系统的websockets。例如,您可以将websocket库与MassTransit一起使用。 SignalR适用于小型项目,或者不是非常细分或实时的场景。