gpt4 book ai didi

c# - 如何解决 SignalR 在背板横向扩展中的局限性

转载 作者:IT王子 更新时间:2023-10-29 04:34:35 27 4
gpt4 key购买 nike

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

according to the issue for this :

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

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

My project needs to High-frequency realtime (e.g., real-time games) .

Also I need real time video chat

我的场景:

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

例子:Server Slave-1和server Slave-2连接Master服务器,client-A和client-B连接Slave-1,client-C和client-D连接Slave-2,

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

How I can implement this scenario ?

[更新-1]

如果我不使用 signalR 解决该问题,那么我应该使用什么?

[更新-2]

在我的场景中,主服务器充当路由器,从服务器充当交换机。连接到交换机的客户端和连接到路由器的交换机。如果客户端A向客户端C发送数据包,数据包应该发送到路由器和路由器处理数据包。超过2000个可能的从服务器数量和每个服务器的用户数量超过 10,000。

谢谢。

最佳答案

背板会在消息传递中引入延迟,这不适用于低延迟工作。如果您绝对必须有多个服务器来处理您的客户端,并且您绝对必须具有最小的延迟,那么背板可能不适合您。

但是,查看 this conversation在 ASP 论坛上。发帖人发现,在一台服务器上,每秒向 3,000 个连接的客户端发送 60,000 条消息的平均延迟约为 25 毫秒。

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

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

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

在问题开始之前规划您的架构以减少问题...但不要花费数周时间处理可能没有必要的事情。在您潜入深渊之前,对 SignalR 进行一些测试,看看背板对延迟的实际影响。

关于c# - 如何解决 SignalR 在背板横向扩展中的局限性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19799078/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com