首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > JAVA > J2SE开发 >

关于Netty4如何实现服务发送数据之后等待返回结果,多谢!

2013-10-22 
关于Netty4怎么实现服务发送数据之后等待返回结果,谢谢!!急急final ChannelFuture f channel.writeAndFl

关于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发消息过来后会通知你消息到了,然后你再处理消息。

热点排行