1

http パイプラインを処理するためのチャネル ハンドラを実装しました。私のコードは github にあります: https://github.com/huntc/netty-http-pipelining

私の質問は、私が取ったアプローチと、それが Netty のアーキテクチャーのコンテキストで合理的なものであるかどうかについてです。

HttpPipeliningHandler が上流の HttpRequest を受け取ると、OrderedUpstreamMessageEvent タイプの新しいメッセージ イベントを形成します。このイベントも私のパッケージの一部であり、応答メッセージを作成するときに必要となる要求に関連する情報を保持します。

さらに上流のチャネル ハンドラーが OrderedUpstreamMessageEvent を受信すると、OrderedDownstreamMessageEvent を生成して応答を形成します。

ctx.sendDownstream(new OrderedDownstreamMessageEvent(oue, somemessage));

どこ

ctx = ChannelHandlerContext instance
oue = OrderedUpstreamMessageEvent instance
somemessage = some message instance to be sent as an http response

チャンクされた返信を送信するなど、もっと楽しいこともできます。

このアプローチは合理的に見えますか? それは確かに機能します!アップストリーム ハンドラーでメッセージ イベントを変換することは定期的/容認されますか? 明らかに、メッセージ イベントが再度変換されると、パイプライン機能は機能しなくなります。

4

1 に答える 1

1

ざっと見てみました... コメントをいくつか。

1) PriorityQueue へのアクセスは、ダウンストリーム イベントが任意のスレッドによって発生する可能性があるため、同期する必要があります。

2) nextRequiredSequence に対しても同じことを行うか、AtomicInteger を使用する必要があります。

3) Channel.close() を使用したい

残りは良さそうです

于 2013-03-28T07:05:46.353 に答える