1

java.net.SocketでsetSoTimeoutを使用するか、ExecutorServiceを使用して別のクラスでHttp呼び出しを行うサービスをラップし、Futuresを使用してメソッドのタイムアウトを管理する方がよいでしょうか。

ベターは現在、グッドプラクティス/より信頼性が高い/正確であると定義されています。かなりの場合を除いて、必ずしもパフォーマンスへの影響を考慮する必要はありません。

編集:より明確にするために、java.net.Socketのconnect(SocketAddressエンドポイント、intタイムアウト)メソッドについても言及する必要があります。

4

2 に答える 2

2

ない?とを使用HttpURLConnection.setReadTimeout()setConnectTimeout()ます。

于 2013-02-13T17:34:18.870 に答える
1

BenG-これは「必要なものによって異なります」シナリオだと思います-同時実行ライブラリで正規化する場合は問題ありませんが、ソケットを自分で閉じる必要があります。

タイムアウトを使用したい場合は、それが自動的に行われます。

コード内のあらゆる場所で並行性ライブラリを使用していて、それらが本当に自然に感じられる場合は、確かに、自分でソケットを手動で管理してください。

技術的に(Socket内のコードを見ると)、どちらにも大きな利点はありません。Futureでソケットの状態を処理しているときに、潜在的なIOExceptionをキャッチしていることを確認してください。そうすれば、Futureを処理しても、実行中のスレッドが爆発する可能性はありません。

于 2013-02-13T19:37:08.017 に答える