当前位置: 首页 > news >正文

外贸网站建设公司/中国重大新闻

外贸网站建设公司,中国重大新闻,校园服装网站建设演示文稿,福田做网站目录 Selector模型 SelectableChannel Channel注册到Selector SelectionKey 遍历SelectionKey 事件驱动 责任链模式 Selector模型 Java NIO是基于Selector模型来实现非阻塞IO,Netty底层基于Java NIO实现的,因此也使用了Selector模型。 Selector提…

目录

Selector模型

SelectableChannel

Channel注册到Selector

SelectionKey

遍历SelectionKey

事件驱动

责任链模式


Selector模型

Java NIO是基于Selector模型来实现非阻塞IO,Netty底层基于Java NIO实现的,因此也使用了Selector模型。

 Selector提供了选择执行已经就绪的任务的能力。从底层看,Selector会轮询Channel是否已经准备好执行每个IO操作。Selector允许单个线程处理多个Channel。

SelectableChannel

        并不是所有的Channel都是可以被Selector复用的,只有抽象类SelectableChannel的子类才能被Selector复用。FileChannel就不能被复用,因其不是SelectableChannel的子类。

        SelectableChannel并发安全。

Channel注册到Selector

 /* *Registers this channel with the given selector, returning a selection* key.*@param  sel*         The selector with which this channel is to be registered** @param  ops*         The interest set for the resulting key** @param  att*         The attachment for the resulting key; may be <tt>null</tt>
**/
public final SelectionKey register(Selector sel, int ops)
public abstract SelectionKey register(Selector sel, int ops, Object att)

可供Selector查询的通道操作主要有四种:

public static final int OP_READ = 1 << 0;
public static final int OP_WRITE = 1 << 2;
public static final int OP_CONNECT = 1 << 3;
public static final int OP_ACCEPT = 1 << 4;
  • 某个SocketChannel通道可以连接到一个服务器,则处于OP_CONNECT状态
  • 一个ServerSocketChannel服务器通道准备好接收新接入的连接,则处于OP_ACCEPT状态
  • 一个有数据可读的Channel,OP_READ状态
  • 一个等待写数据的通道,OP_WRITE状态

SelectionKey

Channel和Selector关系确定好之后,一旦Channel处于某种就绪状态,就可以被选择器查询到,使用Selector.select()方法。

获取感兴趣的事件集合:

public abstract int interestOps();

获取通道已经准备就绪的操作的集合:

public abstract int readyOps();

从SelectionKey访问Channel和Selector:

selectionKey.channel();
selectionKey.selector();

可以将一个对象或其他信息附着到SelectionKey上:

selectionKey.attach(theObject);
selectionKey.attachment();
channel.register(selector, SelectionKey.OP_READ, theObject)

遍历SelectionKey

        Selector selector = Selector.open();ByteBuffer buffer = ByteBuffer.allocate(16);ServerSocketChannel serverSocketChannel = ServerSocketChannel.open();serverSocketChannel.configureBlocking(false);serverSocketChannel.register(selector, SelectionKey.OP_ACCEPT);serverSocketChannel.bind(new InetSocketAddress(8080));while (true) {selector.select();Iterator<SelectionKey> iterator = selector.selectedKeys().iterator();while (iterator.hasNext()) {SelectionKey selectionKey = iterator.next();if(selectionKey.isAcceptable()) {ServerSocketChannel channel = (ServerSocketChannel) selectionKey.channel();SocketChannel socketChannel = channel.accept();socketChannel.configureBlocking(false);socketChannel.register(selector, SelectionKey.OP_READ);}if(selectionKey.isReadable()) {SocketChannel channel = (SocketChannel) selectionKey.channel();channel.read(buffer);buffer.flip();ByteBufferUtil.debugAll(buffer);buffer.clear();}iterator.remove();}}

每次迭代记得调用iterator.remove。

事件驱动

Netty是异步的事件驱动网络应用框架。

责任链模式

http://www.jmfq.cn/news/5190139.html

相关文章:

  • 如何识别网站建设/百度网址怎么输入?
  • 工信部如何查网站备案/如何引流被动加好友微信
  • asp动态网站建设/关键词优化方法
  • 广州专业的网站推广工具/免费发布推广的平台
  • 做火情监控网站需要用什么系统/百度营消 营销推广
  • 建设政府网站的原因/下载优化大师并安装
  • 芜湖效能建设网站/广州网站优化关键词排名
  • 网上学做网站/上海排名优化seobwyseo
  • 32套网站后台管理系统模板/搜狗官网
  • 上海专业网站建设平台/网站建设与管理是干什么的
  • 做网站虚拟服务器/网站建设推广服务
  • 石龙网站建设/英文网站设计公司
  • 做电子请帖网站有哪些/临沂网站建设
  • 建设学校网站策划书/北京网站建设公司报价
  • 义乌义亭招工做网站养猪工作/百度大盘指数
  • 北京住房和城乡建设部网站首页/太原seo推广外包
  • 微信网站制作免费/百度安装app
  • 学网站建设的学校/找公司做网站多少钱
  • 日本人做的网站本子/每日一则小新闻
  • 如何直到网站是用什么模板做的/重庆seo点击工具
  • 百度免费网站制作/计算机培训课程
  • 本机网站建设/网站开发流程的8个步骤
  • 怎么看网站是什么时候做的/学计算机哪个培训机构好
  • 网站注销备案查询系统/新闻热点最新事件
  • 做网站怎样产生效益/搜索引擎推广步骤
  • 公众号开发网站建设合同/网站优化推广服务
  • 网站建设 图纸网/凡科建站登录
  • 技术培训网站/网站优化公司大家好
  • 江西住房和城乡建设信息网站/百度商业平台
  • 怎样做ppt下载网站/桂平seo快速优化软件