2011-09-13 3 views
4

groovyでは、レスポンスを無視してURLにリクエストを送信する方法はありますか?主な目的は、より短期間に、より多くの要求をサーバーに送信することです。Groovy:結果を無視してURLにリクエストを送信する

私にとっては重要ではないので、リクエストが送信されたら、続行する前にスクリプトが応答を待つことは望ましくありません。

はここに私の現在のスクリプトです:このコードで

(1..50).each { element-> 
    def url = "http://someUrl" 
    url.toURL().text 
} 

text方法は、私は本当に気にしない応答全体をロードする必要があります。重要な部分は、要求が送信され、応答を待つことが重要でないことです。

sendの方法はありますか? (..

url.toURL().send 

の線に沿って別の方法として、私は並列でループを実行するためにGPARSを使用して、これをスピードアップすることができ、「グルーヴィー」方法はありますか?

答えて

6

だけであなただけの、URLをでき送るためにテキストを読まずにリクエストを送信するためにwithInputStreamまたはwithReaderメソッドを使用します。これは、ちょうどすぐ近く。GParsについては

、あなただけにwithPoolcallAysncの組み合わせを使用することができます、着信テキストを読むためのハンドラを作成します。要求を同時に実行するスレッドプールを作成するtly。例:

@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 
} 
+0

2つの素晴らしい例 - おかげです。 –

+2

わかりませんが、潜在的に50のオープンな接続を残すことはありませんか? 「接続を閉じても、CallUrl = {"http://google.com" .toURL()。withReader {}}」を閉じても問題ありませんか? –

+0

優れたポイントティム。私はそれに応じて私の例を変更しました。この場合、 'Reader'オブジェクトへの未解決の参照がなかったので、オブジェクトがGCedされたときに接続が閉じられていました。しかし、JVMがそれらのオブジェクトを収集することを決定するまで、多くの接続を開いたままにする可能性があります。 –

関連する問題