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