環境: Win 7 / JRE 1.6.0_45 / Netty 4.0.0_CR7
私のクライアント アプリは、ChunkedByteInput の実装を使用して TCP サーバーにファイルをストリーミングしています。サイズが 10 MB の一般的なファイルは、それぞれ 20 kB のチャンクで転送されるため、約 500 チャンクになります。
TCP 接続は事前に設定され (接続が確立されると [アップロード] ボタンなどの GUI 要素が有効になります)、後で閉じられることもありません。代わりに、単一のファイルを表す ChunkedByteInput 実装は、ファイル名とサイズを含むヘッダー チャンクを先頭に追加し、ファイルの MD5 ハッシュを含むフッター チャンクを追加します。
通常、すべてが順調です。ただし、ランダムなケース (10 ~ 20%) では、任意のチャンクの後で転送が停止します (ChunkedInput.readChunk() は呼び出されなくなります)。回避策として、一定時間 (たとえば 5 秒) 非アクティブな状態が検出された後、不完全な入力をチャネルに再度書き込むだけで、転送が再開され、正常に完了します。しかし、これは明らかに汚いハックです。
この動作の原因は何ですか?
編集:Githubの関連する問題へのリンクは次のとおりです: https://github.com/netty/netty/issues/1506