Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/272.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何解决背板放大中信号器的局限性_C#_Asp.net_.net_Real Time_Signalr - Fatal编程技术网

C# 如何解决背板放大中信号器的局限性

C# 如何解决背板放大中信号器的局限性,c#,asp.net,.net,real-time,signalr,C#,Asp.net,.net,Real Time,Signalr,我使用ASP.NET MVC和C#。我发现SignalR用于实时传输数据,但SignalR有一些限制 : 使用背板时,最大消息吞吐量低于客户端直接与单个服务器节点通信时的吞吐量。这是因为背板将每个消息转发到每个节点,因此背板可能成为瓶颈。此限制是否存在问题取决于应用程序。例如,以下是一些典型的信号机场景: 服务器广播(例如股票行情):背板在这方面工作良好 场景,因为服务器控制消息发送的速率 发送 客户端到客户端(如聊天):在这种情况下,背板可能会 如果消息的数量与消息的数量成比例,则会成为瓶颈

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

:

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

  • 服务器广播(例如股票行情):背板在这方面工作良好 场景,因为服务器控制消息发送的速率 发送
  • 客户端到客户端(如聊天):在这种情况下,背板可能会 如果消息的数量与消息的数量成比例,则会成为瓶颈 客户;也就是说,如果消息的速率随着 更多的客户加入
  • 高频实时(例如,实时游戏):背板不可用 推荐用于此场景
我的项目需要高频实时(例如,实时游戏)

我还需要实时视频聊天

我的设想:

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

例如: 服务器从机1和服务器从机2连接到主服务器,客户端A和客户端B连接到从机1,客户端C和客户端D连接到从机2

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

我如何实现这个场景

[更新-1]


如果我不使用信号器解决这个问题,那么我应该使用什么呢

[更新-2]

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


谢谢。

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

不过,请访问ASP论坛。海报显示,在一台服务器上,每秒60000条消息到3000个连接的客户端的平均延迟约为25ms

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

对于备选方案,首先想到的是。需要做更多的工作,特别是当您的客户端基于浏览器时,但ZeroMQ的项目目标是低延迟和高吞吐量。不过,你需要自己处理扩大规模的问题。。。现在,您可以重新跟踪跨多个服务器的连接点并重新连接

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


在问题开始之前规划您的体系结构以减少问题。。。但是不要花数周的时间去做一些可能不必要的事情。在潜入深渊之前,对信号器进行一些测试,看看背板对延迟有什么影响。

不要使用信号器解决这个问题?那么我应该使用什么?嗨,阿米尔,我正在研究如何做到这一点。您愿意通过github共享任何示例代码吗?