首页   快速返回

netty运行原理     所属分类 netty 浏览量 27
1 初始化创建2个NioEventLoopGroup
  boosGroup用于Accept连接并分发请求, 
  workerGroup用于处理I/O读写事件和业务逻辑

2 基于ServerBootstrap(服务端启动引导类),
  配置EventLoopGroup、Channel类型,连接参数、配置入站、出站事件handler

3 绑定端口,开始工作

NioEventLoopGroup 事件循环组  类似线程池 
包含多个事件循环NioEventLoop,每个NioEventLoop包含1个selector和1个事件循环线程


每个Boss NioEventLoop循环执行的任务 

1 轮询accept事件

2 处理accept I/O事件,与Client建立连接,生成NioSocketChannel,并将NioSocketChannel注册到某个Worker NioEventLoop的Selector上

3 处理任务队列中的任务,runAllTasks。
  任务队列中的任务包括用户调用eventloop.execute或schedule执行的任务,或者其它线程提交到该eventloop的任务。

每个Worker NioEventLoop循环执行的任务 

1 轮询read、write事件;

2 处I/O事件,即read、write事件,在NioSocketChannel可读、可写事件发生时进行处理

3 处理任务队列中的任务,runAllTasks。


任务队列中的task有3种典型使用场景

1 用户程序自定义的普通任务


ctx.channel().eventLoop().execute(new Runnable() {
   @Override
   public void run() {
       //...
   }
});

2 非当前reactor线程调用channel的各种方法
  例如在推送系统的业务线程里面,根据用户的标识,找到对应的channel引用,然后调用write类方法向该用户推送消息,就会进入到这种场景。
  最终的write会提交到任务队列后被异步消费。

3 用户自定义定时任务

ctx.channel().eventLoop().schedule(new Runnable() {
   @Override
   public void run() {
       // ...
   }
}, 60, TimeUnit.SECONDS);

上一篇     下一篇
性能压测工具

netty线程模型和零拷贝机制

netty组件

netty4日志

UnsupportedClassVersionError处理

ServerBootstrap handler()和childHandler()的区别