1

NettyサーバーからWebSocketを介してクライアントに小さなファイル(〜2kb)を送信するアプリケーションを作成しています。

ファイルが成功したかどうかをテストするために、次のテストを行いました。

  1. クライアントはサーバーに接続します。
  2. クライアントマシン上のサーバーからすべてのパケットをドロップするように設定します。
  3. サーバーはファイルをクライアントに送信します。
  4. サーバー上の「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」を正しく機能させる方法を知っている人はいますか?

よろしくお願いします!

4

1 に答える 1

0

ChannelFutureは、データをリモートピアに書き出すことができる場合にのみ通知されます。したがって、通知された場合、他のピアは問題なくデータを受信しました。これは、すべてのサイズのデータ​​に当てはまります。

于 2013-01-24T05:45:42.440 に答える