Netty WebSocket - 正确驱动“ChannelFuture”的“operationComplete”

时间:2013-01-24 03:26:23

标签: websocket netty

我正在编写一个应用程序,通过WebSocket从Netty服务器向客户端发送小文件(~2kb)。

为了测试文件是否发送成功,我进行了以下测试。

  1. 客户端连接到服务器。
  2. 设置从客户端计算机上的服务器中删除所有数据包。
  3. 服务器向客户端发送文件。
  4. 检查服务器上“ChannelFuture”的结果。
  5. 当我在此测试中发送带有~2kb的文件时,我立即从“future.isSuccess()”和“future.isDone()”获得了,即使客户端无法接收该文件。

    我为更大尺寸的文件重复此测试。我发现如果文件大小大于~7kb,“ChannelFuture future”将等待来自传输的反馈。这是我预期的结果。

    我正在使用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”正确处理文件较小的文件?

    非常感谢提前!

1 个答案:

答案 0 :(得分:0)

只有在可以将数据写入远程对等方时,才会通知ChannelFuture。因此,如果通知它,则另一个对等方接收数据没有问题。对于所有大小的数据都是如此。