私のアプリケーションはHTTPリクエストを受信し、パイプラインの途中で、情報をサポートするために別のサーバにコールが発信されます。最初のHTTP要求は、その応答が戻ってくるまでパイプラインを通して継続できません。私はawaitUninterruptability()
をI/Oスレッドから使うことができないので、Nettyのイベントループをブロックしないようにこれらの呼び出しを行う最良の方法は何ですか?しかし、コールアウトが返ってパイプラインに伝えるまでクライアントのパイプラインを保留にします続ける?Nettyの同期HTTPコール
答えて
..
は、私はあなたがより良いことのようなものを使用すべきだと思いますそれは別のSimpleChannelUpstreamHandlerにあります。しかし、私はあなたが考えを得ると思う..
その例の 'ctx'は、アウトバウンドHTTPリクエストのコンテキストです。したがって、イベントを上流に送信することは、イベントを上流へ送信するだけです。私は、 'operationComplete'呼び出しが行われたときに上流のインバウンドHTTPリクエストからイベントを送信する必要があります。私は元のイベントを上流に送信しようとしました(インバウンドコンテキストを 'final'コンテキストを介して無名関数に渡しました)が、インバウンドから' sendUpstream'を明示的にコールしなかったときに、元のパイプラインは** downstream **ハンドラに続きましたパイプライン。 –
オクラホマは正しかった、私はちょうどそれをはっきりと見なかった。また、後で実行される個別のパイプラインハンドラであったはずの、別のステップを並列で実行していたコードにバグがありました。 jistは、クライアントが作業を終了すると、クライアントイベントパイプラインが親コンテキストsendUpstreamを起動することです。クライアント実行呼び出しの後にパラレル実行を引き起こす可能性のあるものがないようにしてください(これは不要です)。 –
ExecutionHandlerが必要です。あなたは、あなたが処理する必要があります応答を待つ必要がある場合は
public class HttpHandler extends SimpleChannelUpstreamHandler{
@Override
public void messageReceived(final ChannelHandlerContext ctx, final MessageEvent e) throws Exception {
otherChannel.write(yourRequet).addListener(new ChannelFutureListener() {
public void operationComplete(ChannelFuture future) throws Exception {
// once the write is done we can continue in the pipeline
ctx.sendUpstream(e);
}
});
// the event stops here to get processed
}
}
:ライアンは、これは良いアイデアのような音はありません
興味深い... AMでこれを試して、必要なものがあるかどうかを確認します。ありがとう! –
私はドキュメントの '新しいOrderedMemoryAwareThreadPoolExecutor(16,1048576,1048576)'を見ています。これらのパラメータ値がかなり共通しているのか、それとも調整すべきなのか、もしそうなら、調整する基準は何か不思議です。 –
これらの数字は、もちろん完全に任意です。あなたの数はあなたの特定のランタイムに完全に依存します。具体的にどのくらいのヒープを自由に使用できるか - オブジェクトのメモリ使用量の計算は難しい場合があります。最適なアプローチは、負荷の変動時にヒープを測定し、特定のエグゼキュータによって消費を見積もり、「控えめな」制限を設定することです。 –
- 1. Nettyを使用した非同期HTTPクライアント
- 2. jQueryコールの同期
- 3. 非同期NSURLConnectionコール
- 4. Silverlight HttpWebRequest同期コール
- 5. NSWindowへの同期コールmakeKeyAndOrderFront
- 6. 非同期のDataTableコール
- 7. WP7で同期Http/RESTコールを行いますか?
- 8. C#非同期HTTPコールを作成する
- 9. cコールの同期はコマンドの同期と同じですか?
- 10. 同期コンテナ内の非同期Javascriptコールのベストプラクティス?
- 11. 同期XMLHttpRequestコールの進捗状況
- 12. 非同期タスクのHTTPステータスコード
- 13. AsyncHttpClientは非ブロッキング非同期HTTPコールを実行できますか?
- 14. オーダーされた非同期AJAXコール
- 15. Http Server Push with Netty + protobuf
- 16. Nettyクライアントで複数の非同期リクエストを送信する
- 17. Angular2:動的同期HTTPリクエスト
- 18. 非同期HTTPポストandroid
- 19. memcachedを非同期的にnettyにアクセスする方法
- 20. HTTP PUTメソッドによるNettyファイルアップロードのサポート
- 21. PHPでの非同期HTTPリクエスト
- 22. ページメソッドのパフォーマンスと非同期httpハンドラ
- 23. 同期HTTP要求の失敗をキャッチ
- 24. Objective Cの - 非同期HTTP要求ブロックプログラム
- 25. Androidのwebviewとjava httpクライアント間のHTTPセッション同期
- 26. UpdatePanelの初期コール
- 27. トルネード非同期HTTPを段階
- 28. Angular2 httpを同期させる方法
- 29. コール別のjavascript関数内の関数同期
- 30. Nettyクライアントの非同期呼び出しが処理されない
しばらくそれを振って、私は正しい軌道にいると思う。私が今行っているのは、同じパイプラインハンドラの別のインスタンスを現在のスタックの直後にスタックに追加して、レスポンスハンドラを渡すことです。その後、上流に送ってください。次に、その応答ハンドラが完了したかどうか(ハンドラ内のカスタムメソッド)を確認し、そうでない場合は、ハンドラの別のインスタンスをパイプラインに追加するなどします。基本的に、応答が返ってきたときに「中断する」ハンドラのループを作成します。私が今いる唯一の問題は、応答が返される前にハンドラのスタックをオーバーフローさせることです。 –