一起学netty(10)netty中的channel
在netty的包中,发现也有ServerSocketChannel和SocketChannel,以及NioServerSocketChannel和NioSocketChannel,概念上来说netty包下的ServerSocketChannel或SocketChannel和nio包下的ServerSocketChannel或SocketChannel的概念是一样的。只不过netty中又重新对nio包中的类进行了封装,增加了更多的功能。
ChannelFuture
在服务端的程序中绑定端口后会返回一个ChannelFuture对象。
ChannelFuture channelFuture = serverBootstrap.bind(8077);
channelFuture.sync();
Channel channel = channelFuture.channel();
System.out.println(channel);
channelFuture.channel().closeFuture().sync();
注意bind方法的执行过程其实是一个异步的过程(在另一个线程中去执行的),bind方法返回后可能监听客户端的ServerSocketChannel并没有建立。
接下来执行sync
方法时,会阻塞,等待监听事件建立完成,端口绑定完成才会继续执行。
客户端的代码也一样:
//服务器ip端口
ChannelFuture future = bootstrap.connect("127.0.0.1", 8077);
future.sync();
Channel channel = future.channel();
connect
方法的执行也是一个异步过程是在另一个线程中执行的。
如果没有执行sync方法,然后调用writeAndFlush方法,消息可能会发送失败。
例如:
//服务器ip端口
ChannelFuture future = bootstrap.connect("127.0.0.1", 8077);
Channel channel = future.channel();
//发送消息
channel.writeAndFlush("hello");
fixed
没有一个冬天不可逾越,没有一个春天不会来临。最慢的步伐不是跬步,而是徘徊,最快的脚步不是冲刺,而是坚持。