@Kayaman说什么:)
什么时间要求?你需要在X秒内成功执行所有的230次吗?你怎么样控制默认的超时?所有请求是否需要导致200
?如果一个请求失败会发生什么?你必须重试,直到成功?如果某些百分比失败,您是否必须使所有其他请求无效?退休怎么样?
如果您不能以串行方式执行请求,则会留下某种并发代码。并发代码比同步代码更困难。有太多的代码路径变体需要推理,同步的内存访问或w/e。
如果您必须在Web请求的上下文中执行请求,那么将并发(线程池)限制为设定数量通常是个好主意。
如果硬编码230是一个设定量,但仍然可能太大。如果这是一个公开可用的端点,则没有任何东西阻止某人向您的服务器发起10,000个并发请求,并且如果您可以为所有这些请求提供2,300,000个并发请求,而不是针对您的230个URL,那么!!!!!!!!正因为如此,所有的资源都应该有某种理智的界限。如果你从一个数据库中取出url,并且任意一个用户可能会添加无限制且不好的url。
一个简单的方法是使用线程池来限制并发。
这个架构可能由一个有界线程池和一个队列组成。当每个Web请求都进入时,它会排队URLS并且线程池可以处理它们。如果你需要返回值,你可以有一个返回值队列。我喜欢的是生产者(web请求处理程序)和消费者(线程池)都是以同步样式编写的,并发性是通过在线程池上执行fetchers来实现的。 Kayaman提到了一种常用于解决此问题的方法:将长时间运行的进程从Web请求的上下文中取出。这个架构可能看起来很像内部线程池和队列,但会是进程间的。该队列将是一个外部进程作业/消息队列,消费者将从该队列中拉出。然后,Web请求会触发230条消息并返回给客户端。而异步的消费者将不断地从队列中拉出并发出请求:)
如果它们除了url之外没有变化,您可以在循环中编写它们。你需要提供的是一个包含所有230个URL的数组。 – kism3t
一个请求怎么需要做230个webservice调用? – Kayaman
嗨kism3t ...你是对的,只有网址会有所不同。请你扩大你的答案。目前我的代码正在运行一个循环,每次调用一个web服务。这种方法的问题是它需要很长时间。 – user2318704