首页 > 编程语言 >Netty源码分析

Netty源码分析

时间:2023-03-08 10:32:50浏览次数:44  
标签:分析 Netty 请求 selector 源码 半包 客户端 NIO


netty源码分析

netty模型selector模式
对普通NIO的性能提升

  • NIO可以同时使用多个selector(使用多线程)
  • 一个selector可以同时注册多个ServerSocketServer(可以绑定多个端口)
  • 单个线程下只能有一个selector,用来实现Channel的匹配及复用

    半包问题
    TCP/IP在发送消息的时候,可能会拆包,这就导致接收端无法知道什么时候收到的数据是一个完整的数据。在传统的BIO中在读取不到数据时会发生阻塞,但是NIO不会。为了解决NIO的半包问题,Netty在Selector模型的基础上,提出了reator模式,从而解决客户端请求在服务端不完整的问题。

netty模型reactor模式(解决半包问题)

Netty源码分析_netty 模型

上图,除去线程池模块,就是Netty NIO的默认模式。在实现上,Netty中的Boss类充当mainReactor,NioWorker类充当subReactor(默认 NioWorker的个数是Runtime.getRuntime().availableProcessors())。在处理新来的请求 时,NioWorker读完已收到的数据到ChannelBuffer中,之后触发ChannelPipeline中的ChannelHandler流。
“boss接活,让work干”:manReactor用来接收请求(会与客户端进行握手验证),而subReactor用来处理请求(不与客户端直接连接)。

Netty的主要组件及功能

  • Selector:SelectableChannel多路复用器
  • EventLoopGroup/EventLoop:采用串行化的方式,避免了线程的频繁切换,实现请求分发的角色。
  • ChannelPipeline其实是担任着Reactor模式中的请求处理器(这里会对客户端请求进行粘包处理,从而解决半包问题)

Netty源码分析_数据_02


标签:分析,Netty,请求,selector,源码,半包,客户端,NIO
From: https://blog.51cto.com/u_15997399/6107690

相关文章

  • Netty入门
    第二部分Netty入门netty可以运用在那些领域?1分布式进程通信例如:hadoop、dubbo、akka等具有分布式功能的框架,底层RPC通信都是基于netty实现的,这些框架使用的版本通常都......
  • Java堆分析
    在JVM中,有以下内存区间:堆、永久区、线程栈、直接内存内存溢出(OOM)的原因及解决方法堆溢出原因:占用大量堆空间,直接溢出解决方法:增大堆空间,及时释放内存永久区溢出原因:生成......
  • eas查询分析器查询6500行后的数据
    分析函数指定行号(rowno),最后按照行号筛选数据即可;脚本中使用了Oracle数据库方言(特有函数),执行SQL时需加上方言标记(/*dialect*/),具体查询脚本请参考下文。--查询前5000行/*di......
  • CobaltStrike WebServer 4.4 特征分析
    WebServer特征本文简单介绍了CobaltStike4.4版本的一些特征以及缓解措施。webserver处理逻辑漏洞请求状态码异常正常的服务器对于uri的开头不为/的情况,一般都会产生4......
  • 第7章 航空公司客户价值分析
    主题:客户价值分析产品:不一定是个具体的东西,可以是一款软件、一则信息一、背景与挖掘目标信息时代的来临使得企业营销焦点从产品中心转变为客户中心,客户关系管理成为企业......
  • SAS数据挖掘EM贷款违约预测分析:逐步Logistic逻辑回归、决策树、随机森林
    全文链接:http://tecdat.cn/?p=31745原文出处:拓端数据部落公众号近几年来,各家商业银行陆续推出多种贷款业务,如何识别贷款违约因素已经成为各家商业银行健康有序发展贷款业......
  • 主题挖掘LDA和情感分析图书馆话题知乎用户问答行为数据|附代码数据
    全文链接:http://tecdat.cn/?p=16890最近我们被客户要求撰写关于主题挖掘LDA和情感分析的研究报告,包括一些图形和统计输出。当前是大数据盛行的时代,各种用户信息行为数据......
  • mybatis 源码简单探究
    一、初始化环境中文网:https://mybatis.net.cn前提maven环境jdk1.8mysql8.0pom.xml<dependencies><dependency><groupId>mysql</grou......
  • Raft算法分析
      Raft是一种更为简单方便易于理解的分布式算法,主要解决了分布式中的一致性问题。相比传统的Paxos算法,Raft将大量的计算问题分解成为了一些简单的相对独立的子问题,......
  • python83 路飞项目、前端 登录页面分析、登录页面、注册页面
    登录页面分析点击登录,弹出登录组件,盖住整个屏幕(定位)点击登录组件中的X,关闭登录组件(子传父)Login.vue<template><divclass="login"><spanstyle="padding:......