SignalR for chat for big users base(用于大用户群聊天的SignalR)
问题描述
我有一个ASP.NET MVC3应用程序。
如果我的应用程序有大量用户-假设是100,000-假设所有用户都在相互交谈,并且我使用SignalR,那么会有100,000个长轮询连接吗?这些是否会导致某种拒绝服务?
我应该改用AJAX HTTP吗?或者,SignalR是否足够智能,以便在特定时间段内未发现任何活动时释放到资源池的连接?
推荐在聊天时使用SignalR聊天,而不是使用AJAX?
推荐答案
您可以相当轻松地禁用Windows服务器上的所有DoS攻击保护。然而,这并不一定能解决您的问题。对于这样的情况,100,000个连接将需要多个服务器。
您的第一个限制是,每个IP地址仅有大约65,000个可能的TCP端口用于服务连接(65,535个但保留较少的端口,等等)。因此,您要么需要一台具有多个IP地址的大型服务器(可能不可靠,并且您的系统/应用程序中存在单点故障),要么您需要在某种负载均衡器后面安装多台服务器。 对于长轮询,当每个长轮询连接结束并启动一个新连接时,您将看到连接的一致"翻转"。TCP端口不会立即重用,但可配置的最快TCP timed wait delay是30秒。因此,即使是65,000个连接也是不切实际的,我只会将其减半用于端口重用。然后,您需要考虑到达该服务器的对网页、睡觉API或其他静电资源的任何其他HTTP请求。然后将处理器/存储器为保存/格式化数据而必须进行的任何其他处理考虑在内。所以我会进一步减少,可能再减少一半。我想说,每台服务器15,000个客户端是一个现实的最大值。因此,对于100,000个用户,负载平衡群集中可能至少需要7台服务器。 上一次我检查SignalR不能在这样的多服务器环境中工作。同样,Ajax或任何其他"频繁刷新"方法在可用TCP端口/套接字的数量等方面也会受到类似的物理限制。您无法在一台服务器上为100,000个客户端提供类似的高频率http请求服务。我已经使用Amazon EC2上的多个服务器使用WebSync for ASP.net做了相当多的测试,测试对象是使用WebSync for ASP.net这样的大规模负载。我在FrozenMountain工作,去年我的工作之一是在Amazon EC2 Cloud上做一些多服务器负载平衡测试。Amazon云服务提供了一个很好的粘性负载均衡器,并且可以轻松复制您的服务器以进行测试。在"实验室条件下"(专用服务器不做其他事情),我们可以在Amazon's "large instance"上超过20k客户端,这是一台四核服务器,内存为7.5 GB。
还值得指出的是,通过最新的Server/IIS/Websync,您可以获得WebSockets支持,这将有助于减少端口周转和重用,因为每个客户端都可以维护到Web服务器的单个持久套接字连接。这可能会增加每台服务器的客户端数量。因此,根据WebSocket兼容浏览器/客户端的采用率,您可能能够从7台服务器集群向下扩展到4-5台服务器。(基于Web浏览器的JavaScript客户端的采用率不会很高,iPhone或Android设备等原生设备都支持WebSocket,因此您将立即看到全部好处)。如果客户端不支持Web套接字,WebSync将从WebSockets回切到长轮询。这篇关于用于大用户群聊天的SignalR的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!
本文标题为:用于大用户群聊天的SignalR
基础教程推荐
- 将 XML 转换为通用列表 2022-01-01
- 为什么Flurl.Http DownloadFileAsync/Http客户端GetAsync需要 2022-09-30
- MS Visual Studio .NET 的替代品 2022-01-01
- 将 Office 安装到 Windows 容器 (servercore:ltsc2019) 失败,错误代码为 17002 2022-01-01
- SSE 浮点算术是否可重现? 2022-01-01
- 如何在 IDE 中获取 Xamarin Studio C# 输出? 2022-01-01
- rabbitmq 的 REST API 2022-01-01
- 如何激活MC67中的红灯 2022-01-01
- 有没有办法忽略 2GB 文件上传的 maxRequestLength 限制? 2022-01-01
- c# Math.Sqrt 实现 2022-01-01