2012-07-05 30 views
1

任务: 我正在使用静态类,因此每个人都共享已经加载的数据。如果有人进行了更改,该请求会将某个项目放入具有增量ID的列表中,我的想法是每个客户端都在客户端拥有它的版本,并请求是否有任何更改。同步webapp客户端(IIS并发请求)

我的解决方案:为此,我使用$ .post,超时时间为5000ms,并在服务器端发送客户端版本,我有一个500循环for循环,检查是否有更新的内容并打破循环,返回更改并在每个周期中都有10ms的Thread.Sleep,所以它不会占用cpu。无论是在客户端上它超时,出现错误,我再次调用帖子,如果它成功我处理返回数据,而不是再次调用帖子。通过这种方式,我总是可以在几乎不需要太多请求的情况下立即获得更改,如果出现问题,我只需要等待5秒就可以恢复。

我的问题是,当此循环运行时,其他请求不处理。使用asp.net开发服务器,没关系,因为它是单线程的。但win7hp iis7.5也是如此。

我试过:将它在注册表(HKLM \ SOFTWARE \微软\ ASP.NET \ 4.0.30319.0 \ MaxConcurrentRequestsPerCPU),增加了工作线程应用程序池,更新与maxConcurrentRequestsPerCPU的aspnet.config文件=“12” maxConcurrentThreadsPerCPU =“0” requestQueueLimit =“5000”的设置,我也读了我的win7hp应该能够使用3个线程。我也认为这是一种优化,我在一个请求中使用了相同的变量,因此它将其他队列排队,所以我评论了这些行,仅将for循环留下了睡眠,但结果相同。

+0

请考虑比单款多格式未来的问题... –

+0

好吧,抱歉:)编辑 – user1269009

+0

多少用户你想同时支持? (1-10,10-100,100-1000,> 1000) 多大设置数据要传递到客户端? 不“送客户端版本”指的是“增量ID”或整个数据集? –

回答

1

不要在线程处理在ASP.Net请求使用的Thread.Sleep。这将基本上消耗线程并阻止更多的请求被启动。有限制的线程数ASP.Net将创建来处理,你已经试图改变的请求,但高线程数将使过程中少敏感和容易造成OutOfMemeoryException为32位proceses - 所以这不是一个很好的途径。

还有其他几个线程讨论用ASP.Net来实现长轮询请求,就像这样 - Can ASP.NET MVC's AsyncController be used to service large number of concurrent hanging requests (long poll)?,明显的Comet问题就是这样 - Comet implementation for ASP.NET?

+0

我试着增加工作线程,正如我所说的,但也导致挂起请求。我期待它处理其他请求,即使这一个请求正在工作(或睡觉) – user1269009

+0

我看着建议的链接。我试过websync,看到它做同样的事情,它启动一个查询,当消息到达时,它立即返回(并创建一个新的查询),如果超时它只是开始一个新的查询。在等待消息发送时处理其他查询真的很难吗? – user1269009