限制ASP.NET 4.5中WebSocket的性能因素?
MSDN文档似乎没有很好地覆盖HTML5 WebSockets协议的 ASP.net 4.5支持!
这就是我要找的东西:
- 服务器/应用程序/ cpu支持多少个活动连接?
- 是否有可以设置/获取的最大传入连接数?
- 无论通过套接字传输数据,每个应用程序的最佳套接字数是多少?
更新:
可以在Adobe Media Server应用程序服务器上很好地配置来自Flash RTMP套接字(websocket的替代方案)的请求。 对于应用程序或IIS 8配置中的ASP.net,请求数量,理想时间,块大小……是不是有任何forms的配置?
对于任何可能感兴趣的人:
- 可以对运行ASP.NET 4.5的单个服务器进行超过100k的WebSocket连接
-
WebSocket连接由HTTP握手启动,因此适用于HTTP请求的一些IIS限制也将应用于WebSockets。 IIS配置中的
appConcurrentRequestLimit
可用于设置每个应用程序的最大并发请求数: -
可以使用ApplicationPool的maxConcurrentRequestsPerCPU属性设置与ASP.net 4 Web应用程序的最大并发连接数 :
-
当连接总数超过
maxConcurrentRequestsPerCPU
设置时,ASP.NET将使用队列启动限制请求。 要控制队列的大小,可以调整machine.config requestQueueLimit : -
在进行并发测试和调整上述详细设置时,应考虑以下性能计数器:
- 所有堆中的.NET CLR内存#bytes
- ASP.NET \请求当前 – 已排队 – 已拒绝
- 处理器信息\处理器时间
- TCP / IP连接已建立
- Web服务\当前连接 – 最大连接数
- .NET CLR LocksAndThreads \#当前逻辑线程 – 当前物理线程数
编辑: 这个答案与.Net 4.0或更早版本有关,其中WebSockets必须由您自己实现(.Net 4.5 + IIS为您提供解决方案)。 所以它只涉及你自己在TCP Layer之上的WebSockets实现。
.Net可以处理的套接字数量取决于系统和服务套接字的方式。 阅读本文: http : //msdn.microsoft.com/en-us/library/windows/desktop/ms739169%28v=vs.85%29.aspx
WebSockets实现使用异步方式提供数据的接收和发送。 这使它们具有很高的可扩展性,并且每个连接不需要大量内存。 因此,连接套接字的数量取决于每个连接和硬件的应用程序逻辑的复杂性。 在大多数情况下,您将面临处理应用程序逻辑的性能问题,然后面临仅基于连接套接字的性能问题。
如果您使用基于原始TCP套接字的自己的实现,则此信息将适用:
在单个网络设备上,您可以绑定少于65k的插槽。 这是接受连接的侦听套接字。 在通常的服务器实现中,您几乎不会使用超过几个或几个10的套接字来接受连接。
客户端套接字可以与您的实现和内存可以处理的一样多。
提供套接字的方法有很多,可以让你处理更多的套接字。 几个亮点:
-
阻塞服务套接字的方式将延迟服务每个套接字。 同样,客户端套接字的非阻塞读取将使用您的cpu来检查是否有可用的数据。 有了大量的sockets,它可以非常省钱。
-
每个客户端套接字的线程将使用大量内存(每个线程超过1mb),这将允许每个物理系统少量的套接字。
-
最好的(imho)选项之一是使用异步套接字。 这允许您拥有数千个套接字,并且在单个服务器系统上实现了数十甚至数十万个套接字。