1

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

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

  1. 客户端连接到服务器。
  2. 设置从客户端机器上的服务器丢弃所有数据包。
  3. 服务器向客户端发送文件。
  4. 在服务器上检查“ChannelFuture”的结果。

当我在这个测试中发送一个 ~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”正确处理小文件?

提前谢谢了!

4

1 回答 1

0

只有当数据可以写入远程对等方时,才会通知 ChannelFuture。因此,如果它被通知,那么另一个对等方接收到的数据没有问题。这适用于所有大小的数据。

于 2013-01-24T05:45:42.440 回答