2011-12-07 6 views
0

私はいくつかの未知の量の初期ヘッダデータ(ヘッダが完全にデコードされるまでの未知の長さ)と、その後の処理のためにディスクに書き込まれるべきデータストリームを伴うバイナリプロトコルを持っています。ほとんどの場合、Nettyのディスクに書き込まれる大きなストリーム(ChunkedWriteHandler?を使用)を処理する方法はありますか?

私は、ヘッダをデコードし、それがChannelBuffersの1つ以上のフレームから来るときにディスクに書き込む実装を持っています(したがって、ハンドラのサブクラスFrameDecoderを使用して、ステップごとにメッセージを作成します。 ChannelBufferを使用してメッセージ全体を格納し、各フレームとともにディスクにファイルデータを書き込む)。私の懸念は、これで十分かどうか、またはChunkedWriteHandlerがこれ以上のことをして大量のアップロードを処理するために必要なものを使用している場合です。

各フレームでChannelBufferからディスクに直接書き込むよりも、ファイルデータを処理する最適な方法はありますか?

答えて

2

スループットが十分であれば十分です。それ以外の場合は、受信したデータの量が十分でないときに、システムコールをあまり頻繁に行わないように(たとえば、32KiBの境界バッファ)、受信データをバッファリングすることができます。

ユーザーにtransferTo/From操作が公開された場合、Nettyがさらに高速になる可能性がありますが、そのような機能はまだ使用できません。

+0

ありがとうございました!バッファに関する良い提案、私は小さなフレームを考慮していなかった。 –

1

ハンドラがある場合は、前にExecutionHandlerを追加することも考えてください。これは、ディスクI/Oによってブロックされないようにするのに役立ちます。そうしないと、ディスクへのアクセスが過度に遅くなることがあります。

関連する問題