一起学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");
猜你喜欢
official
1145
ServerSocketChannel和SocketChannel都是nio中的类。ServiceSocketChannel对象是通过ServerSocketChannel.open()方法创建的
official
1285
在上一节《一起学netty(6)》的文章中,简要说明了用nio原生代码写程序的一些不足和问题,以及netty在nio的基础上大致做了那些工作。其中提到一点就是当活跃客户端的数量太多,单线程处理时所带
official
1452
之前的文章中提到过,单线程的nio模型任然有一定缺点。在上一节《一起学netty(7)netty的线程模型》中也提到,netty的出现,封装了nio复杂的代码,并且介入多线程来处理事件,最大限度的提
official
1434
ChannelHandler用来处理Channel上的各种事件(包括建立连接,数据收发,异常处理等)ChannelHandler分为出站和入栈两种。所有的ChannelHandler被连接成一串,就
official
1190
一、什么是bio?bio即:同步阻塞式IO。就是传统的javaio网络模型。javabio有两个阻塞的地方,第一个地方是需要阻塞的监听端口,等待客户端链接。第二个需要阻塞Socket的read方法
official
1931
上一篇《一起学netty(2)nio模型及多路复用器》中已经简单介绍了nio模型,以及多路复用器的概念,并了解nio是非阻塞的网络模型,以及与bio的区别。本篇将继续深入理解nio,以及select
official
1157
UpdaterequestHTTP包建立起连接,之后的通信全部使用websocket自己的协议,就和http没啥关系了。有兴趣的同学可以多了解一下websocket协议报文的详细信息。Netty实现websoc
official
1204
什么是心跳?顾名思义,所谓心跳,即在TCP长连接中,客户端和服务器之间定期发送的一种特殊的数据包,通知对方自己还在线,以确保TCP连接的有效性。为什么需要心跳?因为网络的不可靠性,有可能在TCP保持
目录
没有一个冬天不可逾越,没有一个春天不会来临。最慢的步伐不是跬步,而是徘徊,最快的脚步不是冲刺,而是坚持。