问题:
我被告知最佳实践表明长时间运行的http Web请求应该转换为更短的异步请求,并具有轮询完成的机制。
为什么?
重要区别:
我正在开发一个Web服务API。它不是由浏览器(它会挂起负载)调用,而是由富客户端(无论如何异步调用远程服务)和脚本(可以执行相同的异步技巧)调用
动机:
我想知道,因为我正在尝试决定何时应该异步请求,截止点是什么?我正在开发一个基于Web的API,其请求需要0.001秒到400秒(以及介于两者之间的任何地方),具体取决于请求(不是参数,而是他们调用的实际方法)。
我可以使所有内容异步(命令完成的轮询除外),但这会使API客户端完成的工作变得复杂(即从请求中获取结果,完成轮询等)。
据我所知,我也可以使所有内容同步,因为无论如何都要完成同样的工作,所以看起来负载会相似。
此外,我使用过的所有网络服务似乎都遵循混合模式,所以他们必须以某种方式做出决定。
我能真正回答这个问题的唯一方法就是知道为什么存在最佳实践。
答案 0 :(得分:17)
异步API不会阻止。每个同步调用都会等待并阻止您的结果返回。这只是一个睡眠线程和浪费的计算。
如果您需要发生某些事情,请发送异步请求,并在请求返回时进行进一步的计算。这意味着您的线程处于闲置状态,可以接受其他工作。
异步请求是扩展到数千个并发用户的方法。
但这使API客户端完成的工作变得复杂
这只是API设计的问题。通常,您可以使用回调来调用Web API来处理此问题。不需要民意调查。
WebService.Call("someMethod" (data) -> {
// do something when data returns.
});