为什么使用SignalR无法很好地扩展邮件传递时间?

时间:2014-07-22 15:37:27

标签: azure signalr signalr-hub signalr.client signalr-backplane

我还在测试SignalR,但对我来说非常重要的一件事就是消息尽快传到客户端(我正在处理实时股票价格)。

事情是 - 几乎在我尝试的每一个场景下 - 从完全本地到在Azure上运行100个实例(带有背板和所有......),消息从服务器到达的时间随着连接客户端数量的增加,客户端呈指数级增长。

我在Hubs,Persistent Connection,.net客户端,在phantomJS中运行的JS客户端,zombieJS& node.js ...我几乎尝试过几十种配置,但行为总是一样的,这让我得出结论,这是SignalR中固有的东西。

我知道SignalR可以在极少数服务器上处理数千个并发客户端,但如果消息需要几秒钟(在同一个Azure区域内),对我来说没用。

知道可能会减慢消息的速度吗?

由于

1 个答案:

答案 0 :(得分:2)

在其横向扩展指南中对此进行了解释:http://www.asp.net/signalr/overview/signalr-20/performance-and-scaling/scaleout-in-signalr

  

限制

     

使用背板,最大消息吞吐量低于它   当客户端直接与单个服务器节点通信时。那是因为   背板将每条消息转发到每个节点,因此背板可以   成为瓶颈。这种限制是否是一个问题取决于   应用程序。例如,以下是一些典型的SignalR场景:

     
      
  • 服务器广播(例如,股票代码):背板适用于此场景,因为服务器控制消息的速率   发送。
  •   
  • 客户端到客户端(例如,聊天):在这种情况下,如果消息数量与数量一致,背板可能会成为瓶颈   客户;也就是说,如果消息的速率成比例增长   客户加入。
  •   
  • 高频实时(例如实时游戏):不建议在此方案中使用背板。
  •   

因此,使用背板会造成延迟,并且取决于您正在执行的应用程序类型......这可能不是正确的选择。

很久以前我放弃了SignalR,专注于后面有正确排队系统的websockets。例如,您可以将websocket库与MassTransit一起使用。 SignalR适用于小型项目,或者不是非常细分或实时的场景。