轮询与 AsyncCallback 回调 - 慢速 Web 服务的最佳方法?

Posted

技术标签:

【中文标题】轮询与 AsyncCallback 回调 - 慢速 Web 服务的最佳方法?【英文标题】:Polling Vs AsyncCallback callbacks - best approach for a slow web service? 【发布时间】:2011-03-17 16:07:42 【问题描述】:

我有一个使用 AJAX 来获取页面搜索结果的网页。在服务器端,我正在查询一个非常慢的 Web 服务 - 20 秒到 2 分钟。

据我了解,我的选择是轮询或长时间运行的请求。

AsyncCallback 似乎是理想的,因为一旦 Web 服务响应就会返回结果,并且线程不会在服务器端阻塞。

有没有更好的方法来做到这一点?你知道在 jQuery 中长时间运行 HTTP 请求有什么问题吗?

更新:是的,我将尽可能缓存来自 Web 服务的响应。我无法控制我正在查询的外部 Web 服务。

【问题讨论】:

这对我来说似乎是个好方法。它将有助于服务器的可扩展性,并且不会影响 AJAX 请求的性能。 如果它是公共网络服务,您可以直接在客户端(异步)或从您的网络服务器获取数据。不确定 jQuery,但异步请求在 javascript (XMLHttpRequest) 中可用。 2 分钟是很长的时间。您是否正在实施寻呼客户端?相反,从数据库中获取分页数据将是一个好方法。 Rashmi - 是的,我会将结果缓存在数据库中,因此更多页面的结果将来自数据库。 【参考方案1】:

我们正在使用 AsyncCallbacks 进行服务器轮询,通常会在 4:30 - 5 分钟内响应,并且系统运行良好。

值得一提的是,您不会获得任何好处(性能、响应时间等),除非您收到太多请求时 IIS 的工作线程池不会耗尽:即。如果我们每分钟收到 2 个请求,我们通常会有 10 - 12 个待处理的请求。在这种情况下,AsyncCallback 将没有任何区别。如果我们每分钟收到 100 个请求,这意味着 500 - 600 个待处理的连接,所以 Async 是必须的。它只是关于管理线程池。

【讨论】:

【参考方案2】:

这种用户浏览到另一个页面的方法只有一个问题,您可以将结果缓存在某处,这样您就不会一直查询网络服务。

【讨论】:

是的,好点。我将尽可能缓存来自 Web 服务的数据。

以上是关于轮询与 AsyncCallback 回调 - 慢速 Web 服务的最佳方法?的主要内容,如果未能解决你的问题,请参考以下文章

轮询与长轮询[关闭]

轮询与长轮询

轮询与长轮询

轮询与中断 简单分析

实时 Web 应用程序的短轮询与长轮询?

ajax轮询与长轮询