龙空技术网

netty代码流程整理

一步走到头 429

前言:

目前各位老铁们对“netty代码”都比较讲究,各位老铁们都想要剖析一些“netty代码”的相关内容。那么小编也在网摘上收集了一些有关“netty代码””的相关内容,希望朋友们能喜欢,看官们快快来学习一下吧!

今天看了一下netty的代码逻辑,写了一个简易的netty例子,主要用于理解。代码上传git云上。地址在下面

1。初始化线程

NioSelectorRunnablePool nioSelectorRunnablePool = new NioSelectorRunnablePool(Executors.newCachedThreadPool(), Executors.newCachedThreadPool());

第一个参数boss 线程 用于监听端口

主要做了哪些事情?

a.初始化一个boss线程组 传递参数 线程池,线程名称,select管理,获取selector并启动线程

第二个参数worker 线程负责数据读写

a.和boss线程相同,不过线程数量是cpu的2倍

启动线程 后

第一步

状态位(原子性)

2.boss 线程是阻塞的

worker阻塞500毫秒 如果没有连接就返回

3.任务队列处理 (线程安全的)

获取队列的所有数据开始执行

4对selector进行任务处理

boss处理selector

获取所有selector --此处和NIO服务端操作相同

ServerSocketChannel server = (ServerSocketChannel) key.channel();

// 新客户端

SocketChannel channel = server.accept();

// 设置为非阻塞

channel.configureBlocking(false);

// select管理中获取一个worker

Worker nextworker = getSelectorRunnablePool().nextWorker();

// 注册新客户端接入任务

nextworker.registerNewChannelTask(channel);

worker处理selector

worker主要用户处理连接后的读写操作

Set<SelectionKey> selectedKeys = selector.selectedKeys();

Iterator<SelectionKey> ite = this.selector.selectedKeys().iterator();

SelectionKey key = (SelectionKey) ite.next();

key中获取channel,进行数据读写

代码是参考的netty源码 地址 :

标签: #netty代码