轮询与 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 服务的最佳方法?的主要内容,如果未能解决你的问题,请参考以下文章