发送http 请求(request)后,需要等待一段时间,比如30秒后才能得到响应(response)。采用java,如何高效的实现在一定时间内,发送http请求后,得到尽可能多的响应。
我尝试过线程池,但是我有大约十多种不同类型的http请求,线程池数量一多比较消耗资源。我也试过Apache的HttpAsyncioRequest,但是其内部实现就是线程池,在我的这个问题上实现效率也不高。有没有比较好的库或者方法,或者类似python coroutine那样,可以高效的实现并发请求。
高洛峰2017-04-17 17:21:27
リファレンス NIO セレクター
原始的な方法で考えてみましょう:
どれだけ同時か非同期かに関係なく、http リクエストが送信される前に TCP 接続が確立されている必要があります。送信後、クライアントはサーバーからの応答を待機するスレッドを待機状態にする必要があります。
クライアントは http リクエストをノンブロッキングで送信し、各スレッド リクエストが送信された後、http の戻りをリッスンする新しいスレッドが作成され、元のスレッドが他の作業を実行します。
このソリューションは 2 倍の N スレッドと N TCP 接続を消費します。
最適化に関するいくつかの考慮事項: 各接続を監視するためにスレッドを消費する代わりに、1 つのスレッドですべての接続の対応する -> セレクターを監視できます。