我们有一位客户需要得到交互式信息服务器,从客户,分布在世界所有类型的防火墙与所有种类的港口关闭。我们唯一可以依靠的是HTTP口80(和HTTPS443).

设计基本上是仿效。(Jabber议定书》),使用我们的客户和IIS。客户的问题得到请求的一个。净处理程序;处理程序拥有的请求开放,同时寻找消息。如果任何消息抵达,他们会立即发送给客户;如果不是,后一个超时关闭连接与"无数据"的反应。客户立即重新开放的通信。

好吧,理论上。

什么是实际发生的情况是,第一,IIS不能处理多于约100同时要求其他人全都排队,并且可以有几分钟的滞之间的"连接"和IIS认识到客户。第二,大约有一半时间的客户时,没有任何响应从服务器(客户超时了五分钟长于服务器的)。

后总是有效。其他数据服务在相同的网络服务器的工作。网络服务相同的服务器上工作。这是一个出的盒子上安装Windows2K3服务器。

是否有一个配置的选择,我们在失踪,或者是还有别的东西我应该看到这个地址?

谢谢。

有帮助吗?

解决方案

我认为你正在达到ASP.NET线程池限制,而不是IIS线程池限制。考虑创建一个异步HTTP处理程序( IHttpAsyncHandler ),就像它们阻塞/等待它们没有占用线程池一样(它们使用完成端口)。

更新:最近碰到这个似乎与我的想法一致: CodeProject:可扩展的COMET与ASP.NET结合使用

其他提示

如果IIS不符合您的要求,您应该选择其他网络服务器,例如 Apache (与 Mod_mono )或 LightTPD

顺便说一下,您可以使用 XMPP Over BOSH 通过HTTP隧道传输XMPP。无需发明自定义协议。

开箱,windows需要一些tweeking.我必须要实现一颗彗星服务器asp.net 并遇到了一些愚蠢的默认。在阅读这些链接:

我想出了以下改变了我们的窗户2k8服务器。

  • reg加HKLM系统\CurrentControlSet\服务\HTTP\参数/v MaxConnections/t数/d1000000/f
  • reg加HKLM系统\CurrentControlSet子参数/v TcpTimedWaitDelay/t数/d30/f
  • reg加HKLM软件\微软\ASP。净\2.0.50727.0/v MaxConcurrentThreadsPerCPU/t数/d0/f
  • reg加HKLM软件\微软\ASP。净\2.0.50727.0/v MaxConcurrentRequestsPerCPU/t数/d30000/f
  • appcmd.exe 设置应用程序池"[池的应用程序名称]"/queueLength:65535
  • appcmd.exe 设置config/部分:serverRuntime/appConcurrentRequestLimit:100000
  • reg加HKLM系统\CurrentControlSet子参数/v MaxUserPort/t数/d65534/f
  • reg加HKLM系统\CurrentControlSet子参数/v MaxFreeTcbs/t数/d2000/f
  • reg加HKLM系统\CurrentControlSet子参数/v MaxHashTableSize/t数/d2048/f reg加HKLM系统\CurrentControlSet\服务\InetInfo\参数/v MaxPoolThreads/t数/d80/f
  • appcmd组config/部分:processModel/requestQueueLimit:100000/commit:机

我不知道如果所有的改变是必需的或最佳,但也有一些快速测试对一个测试服务器,我们那去手动打过30万执行的连接和5k要求每秒。不能去因为我跑出来的客户机器的运行测试。

XMPP从未设计用于高性能应用程序。消息必须遍历整个堆栈到应用程序层,并且有很多XML解析。您是否考虑过使用除XMPP之外的其他标准?

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top