問題タブ [apache-httpasyncclient]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票する
4 に答える
31771 参照

java - java.lang.IllegalStateException: リクエストを実行できません。I/O リアクターのステータス: STOPPED

1 分あたり最大 5 リクエスト以上でリクエストを実行することが期待されるサービスがあります。このサービスは Apache AsyncHttpClient に依存しています。数分ごとに、クライアントはjava.lang.IllegalStateException: 要求を実行できません。I/O リアクターのステータス: STOPPED。クライアントへのすべてのリクエストは、同じ例外メッセージで失敗し始めます。サービスが再開されると、このサイクルが繰り返されます。

この問題をデバッグするのは非常に困難です。リクエストの実行が失敗しても、驚くべきことに AsyncResponseのfailed()メソッドへのコールバックが発生しないためです。

私が収集できたものから、4.3.2 で同様の問題を解決したHttpCore NIOの修正HTTPCORE-370がありました。私は次のバージョンを使用しています -

commons-httpclient-3.1.jar
httpasyncclient-4.1.1.jar
httpcore- 4.4.4.jar httpcore-nio
-4.4.4.jar

まだこの問題を見ています。

0 投票する
1 に答える
3447 参照

apache-httpcomponents - org.apache.http.nio.reactor.IOReactorException: I/O ディスパッチ ワーカーが異常終了しました

Apache HttpAsyncClient を使用するサービスがあります。(バージョン: httpasyncclient-4.0.2.jar、httpcore-4.4.3.jar、httpcore-nio-4.3.3.jar)

非同期クライアントを起動してからしばらくすると、すべてのリクエストが失敗し始めます。最初の例外は次のとおりです。

新しいバージョンでも同じ問題が発生します - httpasyncclient-4.1.1.jar、httpcore-4.4.4.jar、httpcore-nio-4.4.4.jar

どんな洞察も高く評価されます。変更が必要な IOReactorConfig パラメータはありますか?

0 投票する
0 に答える
125 参照

java - リスナー間のノンブロッキング書き込み

Apache 非同期クライアントを使用して http 応答を読んでいます。データのチャンクを読み取るたびに、ノンブロッキング モードでサーブレット出力ストリームに書き込みたいと考えています。このようなもの:

'sos' を WritableChannel にラップしても、明らかにこれは機能しません。

したがって、nio モードに切り替えるには、WriteListener を servletoutputstream に追加する必要がありますが、解決できない問題が発生します。http コールバックから writelistener にデータのすべてのチャンクを渡して、非同期および非ブロッキングで動作させるにはどうすればよいですか?

これは可能ですか?もしそうなら、誰かがそれを行う方法についての手がかりを教えてもらえますか?

0 投票する
1 に答える
3974 参照

java - Unable to set Socket Timeout less than 1000 milliseconds in RequestConfig (Apache HTTP async client 4.1.2)

Following is my code

According to setSocketTimeout value, it should timeout in 100 ms, but it is taking 1000 ms to timeout. setSocketTimeout is honouring all value greater than 1000 ms, though.

0 投票する
1 に答える
181 参照

java - Java での無制限の PipedInputStream

http ライブラリを使用して、サイズが 200 MB のデータを取得しています。次に、データの各行が処理されます。メモリを節約するために、最初に 200 MB がすべてダウンロードされるのを待つのではなく、データがストリーミングされるときにデータを 1 行ずつ処理したいと考えています。

私が使用している http ライブラリは、オーバーライドできる OnCharReceived(CharBuffer buffer) のようなメソッドを公開しているため、データの各チャンクを受信時に実際に処理できます。

このデータを InputStream として公開したいと思います。私が最初に考えたのは、OnCharReceived() で PipedOutputStream に書き込み、スレッドで PipedInputStream から読み取る、PipedInputStream と PipedOutputStream のペアを使用することでした。ただし、これには、スレッドがデータの処理に取りかかるまで、書き込みスレッドが OnCharReceived でブロックする必要があるパイプの基になるバッファーがいっぱいになる可能性があるという問題があるようです。しかし、OnCharReceived でブロックすると、おそらく http ライブラリの IO スレッドでブロックされ、非常に悪い結果になります。

独自のカスタム実装を展開することなく、ここで解決する必要がある抽象的な問題を処理する Java クラスはありますか。大規模なソリューションの一部として使用できる BlockingQueue のようなものを知っています。しかし、簡単な解決策はありますか。

レガシ コードの理由から、InputStream として公開されたデータが本当に必要です。

編集:より正確に言うと、Apache http async ライブラリの次の例に基づいてコードを作成しています

https://hc.apache.org/httpcomponents-asyncclient-dev/httpasyncclient/examples/org/apache/http/examples/nio/client/AsyncClientHttpExchangeStreaming.java