如何处理大量待处理请求

时间:2011-11-04 01:04:14

标签: javascript asp.net performance optimization

我想实现一个网站,向用户显示有关服务器上发生的某些事件的通知。我的计划是:

  1. 向服务器(ASP.NET)发出异步请求,该请求将有600秒的超时时间
  2. 如果在这600秒服务器上发生事件,服务器将使用事件详细信息进行响应
  3. 如果事件未发生,服务器则服务器将在600秒结束时发送“无事件”响应
  4. JS收到服务器的反馈后将处理响应并发送下一个请求。
  5. 这种方法的问题在于,对于大量访问者来说,网站会有很多“未决”的请求。

    问题

    我应该认为这是一个问题吗?什么是解决方案?可能我应该实施另一种方法?

    请建议,欢迎任何反馈。

2 个答案:

答案 0 :(得分:1)

我不知道asp.net处理待处理请求的细节,但你所描述的基本上是长轮询。由于多种原因,这很棘手,包括但不限于:

  • 每个待处理请求都会占用一个线程,并且您需要在每个线程上存储状态
  • 如果你有足够的连接(不一定是那么多;见上文),你需要它们跨越多台机器,然后你需要提出一个架构来在这些机器上分发端点,并确保每个传入的请求转到正确的机器。如果您只向所有用户广播相同的数据,这将变得更加容易。
  • 代理或ISP或有什么可以关闭您的长轮询请求。你需要一个能够适应它的架构。

这是关于asp.net中长轮询的问题:How to do long-polling AJAX requests in ASP.NET MVC?这可能是一个很好的起点。

此外,您可以考虑使用pusher之类的第三方服务来为您处理这些连接,或者(免责声明:我在App Engine上工作)App Engine的渠道API。

答案 1 :(得分:0)

当然,您可以向服务器发出更频繁的请求,这些请求不会消耗服务器资源10分钟?

e.g。每60秒左右发送一次AJAX请求,并返回是否发生了任何事件。缺点是用户可能需要一分钟才能看到有关某些事件的通知,因此如果您需要或多或少立即需要,那就是一个问题。

如果它确实必须是立即的,那么看起来像使用像node.js这样的东西进行“长轮询”可能是一个解决方案,尽管实现起来非常重要。