zoukankan      html  css  js  c++  java
  • netty基础知识讲解

    Reactor线程模型分为单线程模型,多线程模型,主从线程模型

    netty线程模型一般采用Reactor主从线程模型

    EventLoopGroup表示线程池,EventLoop表示线程,channel表示客户端和服务端的连接通道

    EventLoopGroup包含EventLoop,一个EventLoop包含一个Selector,一个Selector可以处理多个channel

    new NioEventLoopGroup() 默认创建的线程池线程数量是系统cpu核数*2

    ServerBootstrap  引导类 

    .group( ) 设置线程组,

    .channel( ) 设置通道类型  Nioserversocketchannel

    .option( )  设置每一个新建立的channel中Tcp连接参数,比如已经成功三次握手的请求队列的长度,是否关闭Nagle算法等

    .childOption( ) 作用于被acceptor之后的连接

    .childHandler( ) 对每个通道的数据的处理 

    Channel表示客户端和服务端的连接通道,是对socket的包装

    Channel的生命周期,ChannelRegisterd  ====》 ChannelActive ====> ChannelInactive ===》ChannelUnregistered

    ChannelRegisterd   注册表示将channel和EventLoop中的Selector绑定

    ChannelActive   激活表示可以发送和接受数据

    ChannelHandler和ChannelPipeline

    ChannelHandler对通道中的数据进行处理

    ChannelPipeline是对ChannelHandler进行管理的管道,可以添加ChannelHandler和删除ChannelHandler等

    一个channel对应一个ChannelPipeline,一个ChannelPipeline管理多个ChannelHandler

    ChannelHandlerContext表示的是ChannelHandler和ChannelPipeline之间的桥梁

    ChannelHandler的执行顺序

    InboundHandler顺序执行,OutboundHandler逆序执行

    InboundHandler之间传递数据,通过ctx.fireChannelRead() 方法

    向管道中添加ChannelHandler一般是先逐个OutboundHandler,在逐个添加InboundHandler。最后一个InboundHandler通过ctx.write() 方法将数据传递到OutboundHandler

    不要在ChannelHandler中调用future的sync或者awat方法

  • 相关阅读:
    JSX
    打包相关
    SpringMVC:数据绑定入门(-)
    转:String,StringBuffer与StringBuilder的区别??
    Spring,@Controller,@RequestMapping, @ResponseBody,@RequestParam
    spring:org.springframework.web.servlet.DispatcherServlet noHandlerFound解决方法
    IDEA: 遇到问题Error during artifact deployment. See server log for details解决方法
    【Quick-Cocos2d-x笔记】【一】Mac环境及相关配置
    Cocos2dx学习之---TableView实现二级菜单
    Cocos2dx学习之---使用Sqlite3的笔记
  • 原文地址:https://www.cnblogs.com/moris5013/p/12113364.html
Copyright © 2011-2022 走看看