美文网首页
Netty学习--Selector

Netty学习--Selector

作者: 何何与呵呵呵 | 来源:发表于2019-10-15 17:55 被阅读0次

Selector , 一般称为选择器。它是 Java NIO 核心组件中的一个,用于轮询一个或多个 NIO Channel 的状态是否处于可读、可写。如此,一个线程就可以管理多个 Channel ,也就说可以管理多个网络连接。也因此,Selector 也被称为多路复用器。

那么 Selector 是如何轮询的呢?

首先,需要将 Channel 注册到 Selector 中,这样 Selector 才知道哪些 Channel 是它需要管理的。
之后,Selector 会不断地轮询注册在其上的 Channel 。如果某个 Channel 上面发生了读或者写事件,这个 Channel 就处于就绪状态,会被 Selector 轮询出来,然后通过 SelectionKey 可以获取就绪 Channel 的集合,进行后续的 I/O 操作。


image.png
// 创建 Selector
Selector selector = Selector.open();
// 注册 Channel 到 Selector 中
channel.configureBlocking(false);
SelectionKey key = channel.register(selector, SelectionKey.OP_READ);
while (true) {
      // 通过 Selector 选择 Channel 
    int readyChannels = selector.select();
    if (readyChannels == 0) {
       continue;
    }
    // 获得可操作的 Channel
    Set selectedKeys = selector.selectedKeys();
    // 遍历 SelectionKey 数组
    Iterator<SelectionKey> keyIterator = selectedKeys.iterator();
    while (keyIterator.hasNext()) {
        SelectionKey key = keyIterator.next();
        if (key.isAcceptable()) {
            // a connection was accepted by a ServerSocketChannel.
        } else if (key.isConnectable()) {
            // a connection was established with a remote server.
        } else if (key.isReadable()) {
            // a channel is ready for reading
        } else if (key.isWritable()) {
            // a channel is ready for writing
        }
        // 移除
        keyIterator.remove(); // <1>
    }
}

相关文章

  • Netty学习--Selector

    Selector , 一般称为选择器。它是 Java NIO 核心组件中的一个,用于轮询一个或多个 NIO Cha...

  • 2023-01-06

    1、学习了netty。了解了selector2、学习了设计模式中的抽象工厂模式。并写了代码3、学习了归并排序,了解...

  • Netty组件介绍

    在学习Netty之前,建议首先学习一个NIO,对关键的NIO组件有一个清醒认识 Buffer Selector 总...

  • Netty组件介绍

    在学习Netty之前,建议首先学习一个NIO,对关键的NIO组件有一个清醒认识 Buffer Selector 总...

  • netty专题:1.netty的组件

    netty主要的组件有三个 selector :是reactor模型的关键,具体到netty就是两组EventLo...

  • Netty服务器源码分析

    本文基于Netty 4 在讨论Netty服务器启动之前,先回顾一下服务端使用Java nio selector的启...

  • netty极简教程(七):Netty中的Selector是如何配

    上一节我们找到了ServerSocketChannel的生成,注册Selector,绑定端口启动等等:netty极...

  • netty 小结

    netty 关键词: 网络编程 nio 事件驱动Rector 和selector机制 相关流程: 引导器BootS...

  • 22.Dubbo线程模型

    Dubbo默认底层通讯为Netty,服务提供放NettyServer使用两级想成池(selector模式),其中E...

  • netty系列之:好马配好鞍,为channel选择配套的sele

    [toc] 简介 我们知道netty的基础是channel和在channel之上的selector,当然作为一个n...

网友评论

      本文标题:Netty学习--Selector

      本文链接:https://www.haomeiwen.com/subject/vjxdmctx.html