码迷,mamicode.com
首页 > Web开发 > 详细

netty 学习总结

时间:2021-03-02 12:28:16      阅读:0      评论:0      收藏:0      [点我收藏+]

标签:学习   进入   blog   拆分   reactor   指定   生成   工作   需要   

一、java nio selector 选择器理解  https://www.cnblogs.com/snailclimb/p/9086334.html

二、netty reactor 模式理解  https://www.cnblogs.com/crazymakercircle/p/9833847.html

三、netty 源码整体理解  https://www.cnblogs.com/crazymakercircle/p/9853586.html

 

四、大概总结

java nio selector 为多路选择器,按照事件触发 分四个事件读就绪 写就绪 接受就绪 连接就绪

chinnal 和selector的关系为 多个channel 会注册到selector 上,注册时会指定一种或多种事件,当指定的事件被选择触发时就会在不断循环的  selector.select()  中找到channel 然后执行业务代码

 

而Reactor 就是把服务端的代码进行一层封装,当有连接时就重新注册一次,读就绪,并设置回调为当前的handler,如果有读的数据就会回调handler的run 方法

 

明天需要梳理有连接和有数据 是否需要创建新的handler?

 

五、新的进展理解

假设处理一个TcpConnection连接分为如下步骤,receive - process - send。如果正常处理,要求当前线程必须处理完这么一整个过程才能处理下个连接。而Reactor可以将其拆分成独立的。即处理receive的时候和process和send可以不挂钩。当前线程可以处理完receive,然后将process注册到事件中,然后处理下个连接。
 
六、netty 中各个名词和经典Reactor 模式对应
Eventloop 对应java nio 中的Reactor 反应器,负责完成channel 的注册、轮询、分发,其内部绑定了java本地的selector 和Thread,轮询的工作就是这个线程干的
Handler 对应Handler ,只不过netty 设计的更加巧妙,使用到了pipeline
Channel 对应 client,也就是netty 中的chinnal 分装了一个java nio 非阻塞类型的channel
 
 
七、Reacrot 代码调试后理解
1.handler 是在每次连接就绪后才会生成,生成handler 的同时将handler 作为callback 对象,当有读就绪事件时回调run方法
2.当设置读就绪时方法会阻塞在  selector.select(); 当设置为写就绪时直接进入业务写,写完成之后再设置为读就绪。
3.accepter 相当一种特殊的handler ,当连接就绪时回调其内部run 方法,hander 负责业务读写,各司其职
 

netty 学习总结

标签:学习   进入   blog   拆分   reactor   指定   生成   工作   需要   

原文地址:https://www.cnblogs.com/lufei33180/p/14457785.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!