在groovy中,有没有办法向URL发送请求,忽略响应?主要目的是在更短的时间内向服务器发送更多请求。
由于结果对我来说并不重要,一旦发送请求,我不希望脚本在继续之前等待响应。
这是我目前的剧本:
(1..50).each { element->
def url = "http://someUrl"
url.toURL().text
}
在此代码中,text
方法必须加载整个响应,我并不真正关心。重要的是发送请求,等待响应并不重要。
是否有类似的send
方法? (沿着...的路线。
url.toURL().send
或者,是否有“groovy”方式我可以使用GPARS并行运行循环来加速这个过程?
答案 0 :(得分:6)
只需发送网址,您就可以使用withInputStream
或withReader
方法发送请求,而无需阅读文字。这将只创建一个处理程序来读取将立即关闭的传入文本。
对于GPars,您可以使用withPool
和callAysnc
的组合来创建线程池以同时执行请求。例如:
@Grab(group='org.codehaus.gpars', module='gpars', version='0.12')
import static groovyx.gpars.GParsExecutorsPool.withPool
withPool(50) {
50.times {
Closure callUrl = {"http://google.com".toURL().withReader {}}
callUrl.callAsync();
}
}
但是,如果您不关心线程数,则可以创建自己的线程而不使用GPars。例如:
50.times {
Closure callUrl = {"http://google.com".toURL().withReader {}}
Thread.start callUrl
}