全て、
アプリケーションに NodeJS と Java のどちらを使用するかを決定しようとしています。HTTP 経由で CouchDB と通信する予定であり、アプリケーション スレッドが CouchDB からのクエリ応答を待機している間に追加の要求を処理できる、非同期のノンブロッキング設計が必要です。
私は Java を使用したいと考えており、潜在的な解決策として数日間 AsyncHttpClient を検討しています。ただし、ライブラリを理解するのに苦労しており、根本的な誤解があるのではないかと思います。
私はここに要旨を投稿しました: https://gist.github.com/conorgil/5505603
この要点が「リクエストXが送信されました!」と出力されることを期待しています。および各リクエストの「レスポンス X: 何か」。ただし、各 Future が get() を呼び出すまで、HTTP 呼び出しは行われない (したがって、ハンドラーは実行されない) ようです。23 行目の f.get() のコメントを外すと、コードは期待どおりに機能しますが、Future#get() の呼び出しがブロックされていますね。HTTP 応答がブロックせずに完全に取得されると実行されるコールバック関数を提供する方法はありますか?
次のようなものです: 1) リクエストがメイン スレッドに着信します。2) 非同期でノンブロッキングの HTTP 呼び出しが CouchDB に対して行われます。CouchDB からの応答を処理するために、完了ハンドラーが登録されます。 3) メイン スレッドは、次の要求を処理するために自由になります。リクエストの処理のみ (CouchDB をヒットする必要のないリクエストの場合、非常に迅速に応答できます)
ここで何かを根本的に誤解していますか?Javaでこの種のことを行うことは可能ですか? AsyncHttpClient が答えですか? この質問は関連していますが、2011年以降に変更があったかどうかはわかりません ( Perform Async Connect with Java AsyncHttpClient Library? )
NodeJS はイベント ループを実行するため、このノンブロッキングの非同期動作は標準です。コールバック関数を登録して DB 応答を受信したときにそれを処理するだけで、イベント ループはその間に他のことを処理するだけです。
あらゆるアドバイスをいただければ幸いです。
ありがとう、コナー