关于Netty4怎么实现服务发送数据之后等待返回结果,谢谢!!急急
final ChannelFuture f = channel.writeAndFlush("to client:"+channel.remoteAddress().toString()+"---------"+msg);// (3)
f.addListener(new ChannelFutureListener() {
public void operationComplete(ChannelFuture future) {
// 写入完成等待数据?本来这里是有个wait的。。。。
//
//读取数据,这里应该这么实现??????????好像下面的不能这么实现
final Channel c = future.channel().read();
ChannelFuture readFuture = c.close();
readFuture.addListener(new ChannelFutureListener(){
@Override
public void operationComplete(ChannelFuture _readFuture) {
}
});
}
});
[解决办法]
如果要确定包是一致性的,就用MD5做数据校验。
public void operationComplete(ChannelFuture future) {
}
这个地方是表示数据已经发送完毕。可以记录一些其他事情,比如日志。
发送完毕后,有新数据响应仍然走 Handler原来的流程。在这里面应该无法读取到响应数据。
(如果服务器同时向多个客户端,连续发送多条指令,每个不同的指令返回的数据不同,那么怎么确定该包为某一指令发出得到的数据)
这个地方 如果是多个客户端,那么每个客户端的ID是唯一的,netty里面有唯一ID号标示请求的唯一性。
还有一种方法是 发送请求时带一个唯一ID号,响应数据时也是带一个唯一ID号,这个唯一ID号就能确保客户端与服务器端的包是否一致性问题。
[解决办法]
Netty用的是NIO,是异步的,即你发送消息给Server后就不用等了,一边玩会去(传统的Socket是一直阻塞在这里等Server消息来,消息不到就一直等)。
等会Server发消息过来后会通知你消息到了,然后你再处理消息。