NettyサーバーからWebSocketを介してクライアントに小さなファイル(〜2kb)を送信するアプリケーションを作成しています。
ファイルが成功したかどうかをテストするために、次のテストを行いました。
- クライアントはサーバーに接続します。
- クライアントマシン上のサーバーからすべてのパケットをドロップするように設定します。
- サーバーはファイルをクライアントに送信します。
- サーバー上の「ChannelFuture」の結果を確認しています。
このテストで〜2kbのファイルを送信すると、クライアント側でもファイルを受信できなくても、すぐに「future.isSuccess()」と「future.isDone()」から真になりました。
サイズの大きいファイルに対してこのテストを繰り返しました。ファイルサイズが約7kbより大きい場合、「ChannelFuturefuture」は送信からのフィードバックを待つことがわかりました。これは私が期待した結果です。
Netty3.6.1を使用しており、アプリケーションは「org.jboss.netty.example.http.websocketx.server」に基づいて構築されています。
これが私のコードの一部です:
ChannelBuffer cb = ChannelBuffers.copiedBuffer(myfile_byteArray);
ChannelFuture result = ctx.getChannel().write( new BinaryWebSocketFrame( cb ) );
result.addListener(new ChannelFutureListener() {
public void operationComplete(ChannelFuture future) throws Exception {
if (future.isSuccess()){
System.err.println("future.isSuccess()");
}
if (future.isDone()){
System.err.println("future.isDone()");
}
if (future.isCancelled()){
System.err.println("future.isCancelled()");
}
}
});
ファイルサイズが小さいファイルに対して「ChannelFuture」を正しく機能させる方法を知っている人はいますか?
よろしくお願いします!