Netty WebSocket-要驾驶“;“操作完成”;“的;“未来”;正确地

Netty WebSocket-要驾驶“;“操作完成”;“的;“未来”;正确地,websocket,netty,Websocket,Netty,我正在编写一个应用程序,通过WebSocket将小文件(~2kb)从Netty服务器发送到客户端 为了测试文件发送是否成功,我进行了以下测试 客户端连接到服务器 设置从客户端计算机上的服务器删除所有数据包 服务器向客户端发送一个文件 正在服务器上检查“ChannelFuture”的结果 在这个测试中,当我发送一个~2kb的文件时,我立即从“future.issucess()”和“future.isDone()”中得到了true,即使客户端无法接收该文件 我对较大的文件重复了这个测试。我发现,如果

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

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

  • 客户端连接到服务器
  • 设置从客户端计算机上的服务器删除所有数据包
  • 服务器向客户端发送一个文件
  • 正在服务器上检查“ChannelFuture”的结果
  • 在这个测试中,当我发送一个~2kb的文件时,我立即从“future.issucess()”和“future.isDone()”中得到了true,即使客户端无法接收该文件

    我对较大的文件重复了这个测试。我发现,如果文件大小大于~7kb,“ChannelFuture”将等待传输反馈。这是我预期的结果

    我使用的是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”如何正确工作吗


    非常感谢

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

    我的测试有错误吗?发送小文件时,ChannelFuture无法在我的应用程序中正常工作。。。如果连接断开,我怎样才能让ChannelFuture测试正常工作?非常感谢!我以为当Netty将数据写入操作系统缓冲区时,ChannelFuture收到了通知。如果没有明确的应用程序级确认消息,应用程序无法确定数据已到达远程对等方。它似乎在等待更大的消息被传输,但我怀疑这只是基于网络条件的共同影响。感谢您解释未来的细节。添加确认消息似乎是解决我的问题的唯一方法。再次感谢你的帮助!