限制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的套接字来接受连接。

客户端套接字可以与您的实现和内存可以处理的一样多。

提供套接字的方法有很多,可以让你处理更多的套接字。 几个亮点:

  1. 阻塞服务套接字的方式将延迟服务每个套接字。 同样,客户端套接字的非阻塞读取将使用您的cpu来检查是否有可用的数据。 有了大量的sockets,它可以非常省钱。

  2. 每个客户端套接字的线程将使用大量内存(每个线程超过1mb),这将允许每个物理系统少量的套接字。

  3. 最好的(imho)选项之一是使用异步套接字。 这允许您拥有数千个套接字,并且在单个服务器系统上实现了数十甚至数十万个套接字。