2012-01-22 12 views

答えて

4

あなたは本当にあなたがChannelFutureを作成しない希望する場合は、ネッティー3のためにこれを行うことができます。

Channels.write(ctx, Channels.succeededFuture(channel), message); 

Channels.succeededFuture(..)は、チャネルのローカルシングルトンオブジェクトを返します。ただし、すでに完了しているため、返された未来にリスナーを追加しないでください。

ctx.write(msg, ctx.voidPromise()); 

ChannelHandlerContext.voidPromise()が満たされることはありませんダミーシングルトン約束を返します。

はネッティー4では、あなたは無効と約束を使用することができます。リスナーを追加する、またはリスナーが実行されるまで待機するなどの操作は、すぐに失敗します。

+0

ありがとう、それは役に立ちます。 – Eirenliel

+0

successedFutureにハンドラを追加するとどうなるのですか?これを行うコードは、未来がすでに成功していることを認識していないかもしれませんか?私の経験によれば、リスナーは追加された後すぐに呼び出されます。これはほとんどの人が私が思っているものです。それとも、時間が経つにつれてリスナーを集めるシングルトンなのでしょうか?この点に関して、Channels.succeededFuture(..)と新しいSucceededChannelFuture(...)の違いはありますか? – user462982

+0

@trustin - Netty 5の構文をこの質問にインラインで表示できますか? – jeevatkm

2

いいえ... ChannelFutureは常に作成されます。しかし、ChannelFutureは安価で小さなものなので、最適化を探すより良い場所があると思います。

私はもっと重要なのは、システムコールでは書き込みが高価になる可能性があるので、Channel.write(..)をできるだけ少なく呼び出すことだと思います。したがって、複数のバッファを送信する必要がある場合は、それらをすべて1つに入れ、Channel.write(...)を1回だけ呼び出すことができます(たとえば5回ではありません)。

SMTPでは、SMTPサーバーがPIPELINING拡張機能をサポートしていて、リソースを最適に使用するなどの場合にこれを行うことができます。

+0

ありがとうございます。 – Eirenliel

関連する問題