确定Web应用程序中的同步与异步

时间:2011-05-11 22:23:06

标签: http asynchronous synchronous

问题:

我被告知最佳实践表明长时间运行的http Web请求应该转换为更短的异步请求,并具有轮询完成的机制。

为什么?

重要区别:

我正在开发一个Web服务API。它不是由浏览器(它会挂起负载)调用,而是由富客户端(无论如何异步调用远程服务)和脚本(可以执行相同的异步技巧)调用

动机:

我想知道,因为我正在尝试决定何时应该异步请求,截止点是什么?我正在开发一个基于Web的API,其请求需要0.001秒到400秒(以及介于两者之间的任何地方),具体取决于请求(不是参数,而是他们调用的实际方法)。

我可以使所有内容异步(命令完成的轮询除外),但这会使API客户端完成的工作变得复杂(即从请求中获取结果,完成轮询等)。

据我所知,我也可以使所有内容同步,因为无论如何都要完成同样的工作,所以看起来负载会相似。

此外,我使用过的所有网络服务似乎都遵循混合模式,所以他们必须以某种方式做出决定。

我能真正回答这个问题的唯一方法就是知道为什么存在最佳实践。

1 个答案:

答案 0 :(得分:17)

异步API不会阻止。每个同步调用都会等待并阻止您的结果返回。这只是一个睡眠线程和浪费的计算。

如果您需要发生某些事情,请发送异步请求,并在请求返回时进行进一步的计算。这意味着您的线程处于闲置状态,可以接受其他工作。

异步请求是扩展到数千个并发用户的方法。

  

但这使API客户端完成的工作变得复杂

这只是API设计的问题。通常,您可以使用回调来调用Web API来处理此问题。不需要民意调查。

WebService.Call("someMethod" (data) -> {
   // do something when data returns.
});