如何解决背板扩展中SignalR的局限性

Ami*_*edi 21 .net c# asp.net real-time signalr

我使用ASP.NET MVC和C#.我发现SignalR实时传输数据,但signalR有一些限制.

根据这个问题:

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

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

我的项目需要高频实时(例如,实时游戏).

我还需要实时视频聊天

我的情景:

我有一个主服务器和多个从服务器,客户端连接到从服务器和ans从服务器连接到主服务器.

示例:服务器Slave-1和服务器Slave-2连接到主服务器,客户端A和客户端B连接到Slave-1,客户端C和客户端D连接到Slave-2,

客户端-A发送消息或数据或与客户端-D进行实时聊天

我如何实现这种情况?

[更新-1]

如果我没有使用signalR来解决这个问题,那么我应该使用什么?

[更新-2]

在我的场景中,主服务器就像一个路由器,而奴隶服务器就像一个交换机.连接到交换机和交换机的客户端连接到路由器.如果客户端-A发送数据包到客户端C,数据包应该发送到路由器和路由器处理数据包.超过2000个可能数量的从服务器和每个服务器的用户数量它超过10,000.

谢谢.

Cor*_*rey 27

背板将导致消息传递延迟,这对于低延迟工作不会很好.如果您绝对必须有多台服务器来处理您的客户端,并且您绝对必须具有最小的延迟,那么背板可能无法为您工作.

但是,请在ASP论坛上查看此对话.该海报的平均延迟大约为25毫秒,每秒60,000条消息,一台服务器上的 3,000个连接客户端.

通常情况下,这里的权衡是在延迟和复杂性之间.最佳解决方案是将消息仅路由到包含目标客户端的服务器.要实现这一目标,您需要一种方法来跟踪每个客户端连接,处理重新连接到不同的服务器等.您可以通过几十个小时的艰苦跋涉编程来解决这个问题,但这样做会打破大部分是什么让SignalR变得有用.

对于替代方案,首先想到的是ZeroMQ.更多的工作,特别是如果您的客户端是基于浏览器的,但低延迟和高吞吐量是ZeroMQ的项目目标.您需要自己处理横向扩展...并且您将回到跟踪多个服务器上的连接点并重新连接.

如果这些都不能解决您的问题,那么您可能需要考虑更改您的架构.MMO的一种常见方法是让相关客户端连接到相同的服务器以减少服务器间通信要求.合法需要传递实时数据的客户端放在一台服务器上,不必担心背板问题.然后,该服务器仅返回"主"服务器,以维护世界状态等所需的内容.

计划您的体系结构以在问题开始之前减少问题...但不要花费数周的时间来处理可能不必要的事情.在进入深渊之前,对SignalR进行一些测试,看看底板对延迟的实际影响.