并行执行web服务调用
本文关键字:调用 服务 web 并行执行 | 更新日期: 2023-09-27 17:52:51
我看到了这些问题在ASP中并行执行。net httpwebrequest的建议。. NET和Async。从大约一年前开始,我想知道他们的建议是否仍然有效,或者现在是否有更好的任务并行库方法。
我的情况更接近第二个问题,除了我只需要点击10个(大约)不同的web服务,而不是相同的3000次。由于这是一个web应用程序,这种请求放大是否会改变建议的方法?有没有更好的办法?随着用户数量的增加,我能在多大程度上期望这样的事情能够扩展?
注意事项:
- 缓存结果将是下一个实现细节,但我想先获得基本功能的工作
- 每个web服务返回非常少的数据(小于1 kb),最长的一个不超过3秒返回,我相信大部分是延迟(生成结果不计算昂贵)
- 从客户端调用web服务将不起作用(我不认为),因为有些是在不同的域
- c#或f#实现都可以工作,理想情况下,这将被抽象为一个方法调用,该方法调用接受
string
并返回string
的集合
您可能会发现这个讨论是相关的:异步而不是并行
Web请求不适合TPL,因为它们是IO,而不是处理。自。net 2.0以来,您已经拥有了所有必要的基础设施:BeginGetResponse
和BeginGetResponseStream
。控制未完成请求的数量(~200是一个很好的消费者操作系统,~2000是服务器版本,在相应地调整TCP参数后,特别是TcpNumConnections
),并确保调整ServicePointManager.DefaultConnectionLimit
。
试图通过简单地通过TPL对数十个或数百个任务抛出同步IO调用来实现高规模和高带宽/吞吐量将使您无法快速获得