• netty 学习总结


    一、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 负责业务读写,各司其职
     
  • 相关阅读:
    element表单中一个elformitem下多个formitem项校验(循环校验)
    vscode配置
    git push时提示错误 sign_and_send_pubkey: no mutual signature supported
    syncthing文件同步网盘配置
    MQTT服务搭建和简单使用
    python脚本避免被多次执行
    Hadoop集群对datanode宕机后的处理机制源码阅读
    工作冲突和低谷
    职场的帮助
    测试总体思想
  • 原文地址:https://www.cnblogs.com/lufei33180/p/14457785.html
Copyright © 2020-2023  润新知