netty入门(五)—seletor

1、介绍

(1)seletor能够检测多个注册的通道上是否有事件发生
即seletor上可以注册通道,seletor可以检测这些注册的通道,并且管理。
seletor就是一直在监听通道,以一定的算法监听。
(2)只有在通道(连接)真正的有读写事件发生的时候,才会进行读写,大大减少了系统开销,并且不必为每一个连接都创建一个线程,也不用去维护每一个线程

2、seletor API

seletor是一个抽象类
在这里插入图片描述
(1)open:可以获得或者创建一个seletor实例
(2)select(timeout):是一个重载方法,当有值传入时,就说明图片中的解释
流程:
seletor会一直监听所有的通道,当有通道有时间发生时,就会将对应的selectorKey加入到集合中,像是以下图片中的集合
在这里插入图片描述得到所有的selectorkey以后,seletor就会遍历这个key,然后反向得到channel.
select()——>无惨方法是阻塞的,也就是说,select会一直监听channel,当所有的通道都没有事件发生时,就会阻塞在那里。
select(timeout)——>有参方法,timeout是指最大的阻塞时间
(3)selectNow
是一个不会 阻塞的select方法,是指马上遍历马上返回,不会一直监听
(4)selectKey()
区别于select方法,select方法只会返回当前有事件发生的selectKey
但是此方法会返回所有在selector中注册的channel的selectKey
(5)wakeup()
唤醒selector

3、selectorKey在NIO中的应用

在这里插入图片描述说明:
(1)当客户端连接时,会通过serverSocketChannel得到socketchannel
(2)selector进行监听select方法,返回有事件发生的通道的个数
selectionKey中的静态非变量(final),指明注册的类型
在这里插入图片描述
register(Selector sel, int ops)中的ops事件就是上面的四个选项之一
op_read:读事件
op_write:写事件
op_connect:连接建议成功
op_accept:客户端连接事件
(3)将socketChannel注册到selector上,SelectionKey register(Selector sel, int ops),一个selector上可以注册多个socketChannel
(4)注册后返回一个selectorKey,会和该selector关联(以集合的形式)
(5)进一步得到各个selectionKey(有事件发生的channel中获取的)
(6)再通过selectionKey反向获取 SelectableChannel channel();
(7)通过得到的channel,完成业务处理

理解源码

在这里插入图片描述是指将当前的channel注册到哪一个seletor中去。opt值的是哪个事件

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值