1

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

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

我已经尝试过集线器、持久连接、.net 客户端、运行在 phantomJS、zombieJS 和 node.js 中的 JS 客户端……我已经尝试了很多配置,但行为总是相同的,这让我得出的结论是,这是 SignalR 固有的。

我知道 SignalR 可以在很少的服务器上处理数千个并发客户端,但是如果消息需要几秒钟才能通过(在同一个 Azure 区域中),那对我来说毫无用处。

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

谢谢

4

1 回答 1

2

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

限制

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

  • 服务器广播(例如股票行情):背板在这种情况下工作得很好,因为服务器控制发送消息的速率。
  • 客户端到客户端(例如,聊天):在这种情况下,如果消息数量随客户端数量增加,那么背板可能会成为瓶颈;也就是说,如果消息的速率随着更多客户端的加入而按比例增长。
  • 高频实时(例如实时游戏):不建议在这种情况下使用背板。

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

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

于 2014-07-24T14:02:52.023 回答