- r - 以节省内存的方式增长 data.frame
- ruby-on-rails - ruby/ruby on rails 内存泄漏检测
- android - 无法解析导入android.support.v7.app
- UNIX 域套接字与共享内存(映射文件)
我使用 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/
我已经实现了 SignalR BackPlane,它似乎工作正常。 用过这个URL供引用。 我正在创建一个新的 SQL 数据库来实现 SingalR。我的疑问是:为什么我必须创建一个新的数据库,或者为
我想知道是否可以将 SignalR 消息直接添加到 SignalR SQL 背板(来自 SQL),这样我就不必使用 SignalR 客户端来执行此操作。 我的情况是,我有一个已激活的 SQL Serv
我有以下 Hub 片段与 SignalR、Redis 背板和单个服务器一起工作。 public abstract class HubBase : Hub { private r
我目前正在玩 SignalR 2.0.3,通过使用 Redis for windows 的 BackPlane 进行横向扩展 http://msopentech.com/blog/2013/04/22
是否有人尝试连接 AWS Elasticache Redis(禁用集群模式)以与 SignalR 一起使用?我发现 AWS Redis 存在一些严重的配置问题和限制。 1) 我们正在尝试使用 Redi
我是一名优秀的程序员,十分优秀!