netty获取玩家chanel_Netty中的Channel

在JDK中就有Channel的概念了. 数据的读写都要通过Channel进行. 既然Netty是封装了JDK, 同样它也有自己的Channel. 一个是服务端Chanel(NioServerSocketChannel),另一个是客户端Channel(NioSocketChannel).

NioServerSocketChannel负责监听客户端的Accpet事件,当发生此事件时.那么它什么时候?或者在哪里知道有Accept事件呢?在之前的文章中我们知道,每一个Channel都和一个NioEventLoop关联,NioServerSocketChannel也和一个NioEventLoop关联.而NioEventLoop封装了一个IO Thread,由这个线程去监听Accept事件.

NioEventLoop主要由三个过程构成. 创建-启动-执行. 执行的环节是个无限循环.当IO Thread监听到有Accept事件后, 会调用JDK底层accept()方法获取到这个连接, 然后再封装成Netty自己的NioSocketChannel.这个就是对应的客户端Channel.

每一个Channel都与一个Pipeline关联, 在创建Channel的时候也会创建出来一个与之关联的Pipeline. Pipeline通过链表的方式将用户自定义的处理器Handler放在Pipeline中, 当Channel中有数据时, 就会由关联的Pipeline进行处理, 更具体说, 是由里面的每个Handler进行处理.

NioServerSocketChannel关联的Pipeline有一个默认的Handler,即ServerBootstrapAcceptor.它也是一个Handler.

pipeline.addLast(new ServerBootstrapAcceptor(ch, currentChildGroup, currentChildHandler, currentChildOptions, currentChildAttrs));

从名字中我们可以看出来,它和接收客户端连接有关.没错, 上面我们也说了, 当客户端NioSocketChannel被创建出来之后, 还没有结束, 因为单单的创建出来NioSocketChannel并没有多少卵用. 后续流程就会交给这个ServerBootstrapAcceptor进行处理.那么它又处理什么呢?主要包括初始化NioSocketChannel,以及将其注册到NioEventLoop,而这个NioEventLoop肯定和NioServerSocketChannel关联的那个NioEventLoop不是同一个.

NioSocketChannel负责数据的读写.

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值