一起学netty(10)netty中的channel

weblog 1301 0 0

在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 1435 ChannelHandler用来处理Channel各种事件(包括建立连接,数据收发,异常处理等)ChannelHandler分为出站和入栈两种。所有ChannelHandler被连接成串,就
official 1453 之前文章提到过,单线程nio模型任然有定缺点。在上节《netty(7)netty线程模型》也提到,netty出现,封装了nio复杂代码,并且介入多线程来处理事件,最大限度
official 1190 、什么是bio?bio即:同步阻塞式IO。就是传统javaio网络模型。javabio有两个阻塞地方,第个地方是需要阻塞监听端口,等待客户端链接。第二个需要阻塞Socketread方法
official 1932 篇《netty(2)nio模型及多路复用器》已经简单介绍了nio模型,以及多路复用器概念,并了解nio是非阻塞网络模型,以及与bio区别。本篇将继续深入理解nio,以及select
official 1158 UpdaterequestHTTP包建立连接,之后通信全部使用websocket自己协议,就和http没啥关系了。有兴趣可以多了解下websocket协议报文详细信息。Netty实现websoc
official 1205 什么是心跳?顾名思义,所谓心跳,即在TCP长连接,客户端和服务器之间定期发送种特殊数据包,通知对方自己还在线,以确保TCP连接有效性。为什么需要心跳?因为网络不可靠性,有可能在TCP保持
目录
没有一个冬天不可逾越,没有一个春天不会来临。最慢的步伐不是跬步,而是徘徊,最快的脚步不是冲刺,而是坚持。