我正在编写一个应用程序,通过 WebSocket 从 Netty 服务器向客户端发送小文件(~2kb)。
为了测试文件是否发送成功,我进行了以下测试。
- 客户端连接到服务器。
- 设置从客户端机器上的服务器丢弃所有数据包。
- 服务器向客户端发送文件。
- 在服务器上检查“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”正确处理小文件?
提前谢谢了!