E-COM-NET
首页
在线工具
Layui镜像站
SUI文档
联系我们
推荐频道
Java
PHP
C++
C
C#
Python
Ruby
go语言
Scala
Servlet
Vue
MySQL
NoSQL
Redis
CSS
Oracle
SQL Server
DB2
HBase
Http
HTML5
Spring
Ajax
Jquery
JavaScript
Json
XML
NodeJs
mybatis
Hibernate
算法
设计模式
shell
数据结构
大数据
JS
消息中间件
正则表达式
Tomcat
SQL
Nginx
Shiro
Maven
Linux
Netty源码分析
这可能是目前最透彻的Netty原理架构解析
性能调优、Spring,MyBatis,
Netty源码分析
的朋友可以加我的Java高级架构进阶群:180705916,群里有阿里大牛直播讲解技术,以及Java大型互联网技术的视频免费分享给大家Netty
高级java架构师
·
2020-02-17 06:09
开始使用Filebeat
微服务、Spring,MyBatis,
Netty源码分析
的朋友可以加我的Java高级交流:854630135,群里有阿里大牛直播讲解技术,以及Java大型互联网技术的视频免费分享给大家。
java进阶高级
·
2020-02-14 17:21
Netty源码分析
之ChannelPipeline—入站事件的传播
之前的文章中我们说过ChannelPipeline作为Netty中的数据管道,负责传递Channel中消息的事件传播,事件的传播分为入站和出站两个方向,分别通知ChannelInboundHandler与ChannelOutboundHandler来触发对应事件。这篇文章我们先对Netty中入站事件的传播,也就是ChannelInboundHandler进行下分析:1、入站事件传播示例我们通过一个
bigfan
·
2020-02-14 12:00
Netty源码分析
之Channel
作者:一字马胡转载标志【2017-11-03】更新日志日期更新内容备注2017-11-03添加转载标志持续更新Netty是一个基于NIO的基于事件的高性能网络框架,在NIO里面,比较和核心的三个内容分别是Channel、Buffer、Selector,Channel负责网络数据传输,而Buffer则存储数据,Buffer可以从Channel中获取到数据,也可以向Channel里面写入数据,Sele
一字马胡
·
2020-02-14 09:11
netty源码分析
(15)- 新连接NioEventLoop分配和Selector注册
上一节总结了channel代码的架构,了解了从鼎城channel接口的定义以及一层一层最后区分开客户端channel和服务端channel。从中也可以体会到抽象和集成的特点。本节回顾一下在服务端启动初始化的时候ServerBootstrap#init(),主要做了一些参数的配置。其中对于childGroup,childOptions,childAttrs,childHandler等参数被进行了单独
Jorgezhong
·
2020-02-13 04:01
Netty源码分析
-NioEventLoop
NioEventLoop是实现Reactor模型的非常重要的一个类。它是一个Loop循环线程,Loop的核心可以看下它的run()方法:1)执行Selector的select;2)执行一些task。下边的这张图片可以简单的描述Loop循环的操作。Loop循环1.私有变量及构造函数简单看一下NioEventLoop的私有变量以及它的构造函数:publicfinalclassNioEventLoope
yunkai_zhang
·
2020-02-11 18:39
Netty源码分析
之ByteBuf(二)
ByteBuf是一个缓冲区,用于和NIO通道进行交互。缓冲区本质上是一块可以写入数据,然后可以从中读取数据的内存。这块内存被包装成NIOBuffer对象,并提供了一组方法,用来方便的访问该块内存。每当你需要传输数据时,它必须包含一个缓冲区。虽然JavaNIO为我们提供了原生的多种缓冲区实现,但是使用起来相当复杂并且没有经过优化,有着以下缺点:不能进行动态的增长或者收缩。如果写入的数据大于缓冲区ca
北京的小毛驴
·
2020-02-11 03:32
Netty源码分析
-07 Netty内存管理
内存管理的主要目的合理分配内存,减少内存碎片,及时回收资源,提高内存的使用效率。从操作系统层面来说,各个软件在运行时向操作系统请求对计算机内存资源进行快速的分配,并且在适当的时候释放和回收内存资源。常见的一些算法有slab,buddy,jemalloc等思想。从Netty层面来说,其实质就是先分配一块大内存,然后在内存的分配和回收过程中,使用一些数据结构记录内存使用状态,如果有新的分配请求,根据这
史圣杰
·
2020-02-10 15:01
面试官问我,使用Dubbo有没有遇到一些坑?我笑了。
微服务、Spring,MyBatis,
Netty源码分析
的朋友可以加我的Java高级交流:854630135,群里有阿里大牛直播讲解技术,以及Java大型互联网技术的视频免费分享给大家。
java进阶高级
·
2020-02-10 14:40
Netty源码分析
-Channel分类
先来看下Channel相关类图:Netty中channel类图为了便于理解,上面的类图对层次关系做了一定的简化。Channel接口定义了Netty中网络IO最顶层的框架。AbstractChannel是Channel接口的骨架实现,这个类中定义了channel的几个重要成员,id(ChannelId),unsafe(Unsafe),pipeline(DefaultChannelPipeline),
横渡
·
2020-02-07 01:40
netty源码分析
之Future/Promise
一、前言在分析Netty的源码的时候,一直看到Future、Promise之类的类,Future之前还接触过一点知道大致是什么东西,不过Promise没了解过,所以在分析源码之前,顺便学习下Future/Promise~二、Future1、Future是什么?首先需要明白一点的是,它不是netty自己私有的东西,它在jdk1.5后的concurrent包中就已经有了.通过一个例子了解本质:1、cl
是书生
·
2020-01-05 08:27
Netty源码分析
之服务启动
占小狼转载请注明原创出处,谢谢!本文主要分析Netty服务端的启动过程。Netty是基于Nio实现的,所以也离不开selector、serverSocketChannel、socketChannel和selectKey等,只不过Netty把这些实现都封装在了底层。从示例可以看出,一切从ServerBootstrap开始。ServerBootstrap实例中需要两个NioEventLoopGroup
占小狼
·
2020-01-05 07:48
netty源码分析
之拆包器的奥秘
为什么要粘包拆包为什么要粘包首先你得了解一下TCP/IP协议,在用户数据量非常小的情况下,极端情况下,一个字节,该TCP数据包的有效载荷非常低,传递100字节的数据,需要100次TCP传送,100次ACK,在应用及时性要求不高的情况下,将这100个有效数据拼接成一个数据包,那会缩短到一个TCP数据包,以及一个ack,有效载荷提高了,带宽也节省了非极端情况,有可能两个数据包拼接成一个数据包,也有可能
简书闪电侠
·
2020-01-04 02:26
Netty源码分析
(三)ChannelPipeline
ChannelPipeline可以认为是Netty所有操作的聚合。Netty默认给了唯一的一个实现DefaultChannelPipeline。DefaultChannelPipeline包含了一组双向的ChannelHandler,这组ChannelHandler以责任链的模式提供一组逻辑操作。image.pngDefaultChannelPipeline在构造时生成head,tail2个han
三斤牛肉
·
2020-01-03 21:28
MyBatis事务管理机制
微服务、Spring,MyBatis,
Netty源码分析
的朋友可以加我的Java高级交流:787707172,群里有阿里大牛直播讲解技术,以及Java大型互联网技术的视
java进阶高级
·
2020-01-01 02:04
netty源码分析
之服务端启动全解析
backgroundnetty是一个异步事件驱动的网络通信层框架,其官方文档的解释为NettyisaNIOclientserverframeworkwhichenablesquickandeasydevelopmentofnetworkapplicationssuchasprotocolserversandclients.Itgreatlysimplifiesandstreamlinesnetwo
简书闪电侠
·
2019-12-31 21:47
netty源码分析
之服务端启动全解析
backgroundnetty是一个异步事件驱动的网络通信层框架,其官方文档的解释为NettyisaNIOclientserverframeworkwhichenablesquickandeasydevelopmentofnetworkapplicationssuchasprotocolserversandclients.Itgreatlysimplifiesandstreamlinesnetwo
高级java架构师
·
2019-12-31 12:15
Netty源码分析
——服务端channel的创建
工作时候,有用过Netty写过网络库。最近想研究下RPC框架,就想着写几篇博客,梳理下Netty的源码。(研究的源码版本是4.1.x)最简单的示例首先还是拿Netty官网的UserGuide做例子/***Handlesaserver-sidechannel.*/publicclassDiscardServerHandlerextendsChannelInboundHandlerAdapter{//
端吉
·
2019-12-27 17:20
netty源码分析
-线程池
众所周知,netty是一款性能非常出色的nio框架,作为dubbo等众多优秀项目底层的数据传输框架,研究吃透它,对于我们今后的开发是绝对有益无害的,所以从今天开始我们就研究netty。本次分析基于netty4,请诸位看官自行下载jar包及源码。好了,我们今天说一下netty的线程池。我们经常会看到netty的代码中有下面这一句。EventLoopGroupworkerGroup=newNioEve
数齐
·
2019-12-27 14:18
netty源码分析
之服务端启动
ServerBootstrap与Bootstrap分别是netty中服务端与客户端的引导类,主要负责服务端与客户端初始化、配置及启动引导等工作,接下来我们就通过netty源码中的示例对ServerBootstrap与Bootstrap的源码进行一个简单的分析。首先我们知道这两个类都继承自AbstractBootstrap类接下来我们就通过netty源码中ServerBootstrap的实例入手对其
fad2aa506f5e
·
2019-12-26 23:55
netty 源码分析 (四) 线程模型
netty源码分析
(四)线程模型sschrodinger2019/06/27引用《Netty权威指南》第二版-李林锋著JDKversion1.8Reactor模型Reactor单线程模型Reactor单线程模型指的是所有的
sschrodinger
·
2019-12-20 20:15
Netty源码分析
(六)EventLoopGroup
EventLoopGroup包含了EventLoop的一个数组privatefinalEventExecutor[]children;protectedMultithreadEventExecutorGroup(intnThreads,Executorexecutor,EventExecutorChooserFactorychooserFactory,Object...args){children
三斤牛肉
·
2019-12-20 08:37
Netty源码分析
系列--1.NioEventLoopGroup
Netty服务器开发模式publicclassMyServer{publicstaticvoidmain(String[]args)throwsInterruptedException{EventLoopGroupbossGroup=newNioEventLoopGroup();EventLoopGroupworkerGroup=newNioEventLoopGroup();ServerBoots
ted005
·
2019-12-20 07:37
Bootstrap --- 客户端
简述这一章是
netty源码分析
系列的第一章,在这一章中只展示Netty的客户端和服务端的初始化和启动的过程,给读者一个对Netty源码有一个大致的框架上的认识,而不会深入每个功能模块。
水欣
·
2019-12-19 12:47
[
Netty源码分析
]EventLoop
QUESTION:默认情况下Netty服务端起多少线程?何时启动?Netty如何解决JDK空轮训BUG?Netty如何保证异步串行无锁化?(待完善)NioEventLoopGroup创建NioEventLoopGroup实例化过程.pngnetty的程序的启动(在服务端一般是两个NioEventLoopGroup线程池,一个boss,一个worker;对于客户端一般是一个线程池)我们一般是使用NI
没意思先生1995
·
2019-12-19 04:51
Netty源码分析
-03 Netty线程池
线程池是一个在多线程场景中运用很广泛的并发框架,需要异步执行或并发执行任务的程序都可以使用线程池。有任务到来时,如果不使用线程池,我们需要不断的创建/销毁线程,还需要对线程进行管理;而使用线程池,直接将任务提交到线程池即可。使用线程池有几个好处:无需重复创建/销毁线程,降低资源消耗;提高程序响应速度;提高线程的可管理性。3.1实现原理线程池内部一般包含一个核心线程池,其内部的线程在创建之后一般不会
史圣杰
·
2019-12-15 03:12
Netty源码分析
6 - 服务端启动流程
//1.配置bossGroup和workerGroupfinalEventLoopGroupbossGroup=newNioEventLoopGroup(1);finalEventLoopGroupworkerGroup=newNioEventLoopGroup();//2.创建业务逻辑处理器finalEchoServerHandlerserverHandler=newEchoServerHand
原水寒
·
2019-12-12 00:30
netty 源码分析 (三) Channel
netty源码分析
(三)Channelsschrodinger2019/06/25参考《Netty权威指南》第二版-李林锋著JDKversion1.8Channel簇ChannelChannel是netty
sschrodinger
·
2019-12-07 23:56
Netty源码分析
之ChannelPipeline(二)—ChannelHandler的添加与删除
上篇文章中,我们对Netty中ChannelPipeline的构造与初始化进行了分析与总结,本篇文章我们将对ChannelHandler的添加与删除操作进行具体的的代码分析;一、ChannelHandler的添加下面是Netty官方的一段demo源码,可以看到在服务端初始化时执行了向ChannelPipeline中添加自定义channelHandler的操作。ServerBootstrapb=ne
bigfan
·
2019-12-07 16:00
netty源码分析
之nio线程个数以及线程命名规则
概述netty是一个以高性能著称的网络通信框架,许多开源项目都使用了netty作为底层网络通信框架,如avro,dubbo,nats;本文将从源码的角度讲述netty在确定线程个数方面如何保证应用程序性能最优,源码基于netty-4.1.6.Final线程个数在何时达到最优我们知道,在一个应用中,如果cpu计算的时间为Tcpu,io操作的时间为Tio,系统的cpu核数为Ncpu,线程个数为Nthr
简书闪电侠
·
2019-11-08 17:50
Netty源码分析
-Server端启动
本文主要对Netty中Server端启动进行分析,分析Server端是如何绑定端口,初始化Selector,启动NioEventLoop,并最终实现Reactor模式的。首先看一段经典的Server启动代码。可以看到该过程中实例化了两个EventLoopGroup县城组:bossGroup、workerGroup。可以看到这个Server采用的是Reactor的多线程模式。创建的SimpleNet
yunkai_zhang
·
2019-11-06 20:40
Netty源码分析
2 - ThreadLocal 源码解析
netty新增了FastThreadLocal和FastThreadLocalThread等类来实现了一个FastThread框架,相较于java.lang.Thread和java.lang.ThreadLocal速度更快。在看FastThread框架之前,先看一下java.lang.ThreadLocal的源码。一、使用姿势二、数据结构三、源码分析四、回收机制总结一、使用姿势publicclas
原水寒
·
2019-11-03 22:31
netty源码分析
之揭开reactor线程的面纱(一)
netty最核心的就是reactor线程,对应项目中使用广泛的NioEventLoop,那么NioEventLoop里面到底在干些什么事?netty是如何保证事件循环的高效轮询和任务的及时执行?又是如何来优雅地fix掉jdk的niobug?带着这些疑问,本篇文章将庖丁解牛,带你逐步了解nettyreactor线程的真相[源码基于4.1.6.Final]reactor线程的启动NioEventLoo
简书闪电侠
·
2019-10-31 10:23
Netty源码分析
之ChannelPipeline(一)—ChannelPipeline的构造与初始化
Netty中ChannelPipeline实际上类似与一条数据管道,负责传递Channel中读取的消息,它本质上是基于责任链模式的设计与实现,无论是IO事件的拦截器,还是用户自定义的ChannelHandler业务逻辑都做为一个个节点被添加到任务链上。一、ChannelPipeline的设计与构成ChannelPipeline中作为Netty中的数据管道,作用就是通过控制与联通不同的Channel
bigfan
·
2019-10-26 15:00
Netty源码分析
-Unsafe
Unsafe是JAVA提供偏底层的一个工具类,提供堆外内存管理,CAS操作,线程调度等功能。Unsafe这个类不能直接获取,需要用反射获取其对象。//反射拿到Unsafe对象privatestaticUnsafereflectGetUnsafe(){try{Fieldfield=Unsafe.class.getDeclaredField("theUnsafe");field.setAccessib
温故而知新666
·
2019-10-16 17:59
Netty
Netty源码分析
-PlatformDependent内存管理
PlatformDependent类当中的常量,定义了允许使用的堆外内存最大值,该值可以通过-XX:MaxDirectMemorySize=2G设置。privatestaticfinallongMAX_DIRECT_MEMORY=maxDirectMemory0();在netty中,如果使用了堆外内存,Netty会进行统计,如果超过最大限制会抛出异常。privatestaticvoidincrem
温故而知新666
·
2019-10-15 16:27
Netty
Netty源码分析
-NioEventLoop(二)
NioEventLoop源码分析。EventLoop的本质:内部一个线程,一个有序队列存储,线程源源不断的运行队列中的任务。register方法把java-nio的channel注册到selector上面。//把JAVA底层Channel注册到selector上publicvoidregister(finalSelectableChannelch,finalintinterestOps,final
温故而知新666
·
2019-10-14 13:13
Netty
Netty源码分析
-MultithreadEventExecutorGroup
MultithreadEventExecutorGrouppublicabstractclassMultithreadEventExecutorGroupextendsAbstractEventExecutorGroup{privatefinalEventExecutor[]children;privatefinalSetreadonlyChildren;privatefinalAtomicInt
温故而知新666
·
2019-10-12 16:33
Netty
Netty源码分析
(十二)----- 心跳服务之 IdleStateHandler 源码分析
什么是心跳机制?心跳说的是在客户端和服务端在互相建立ESTABLISH状态的时候,如何通过发送一个最简单的包来保持连接的存活,还有监控另一边服务的可用性等。心跳包的作用保活Q:为什么说心跳机制能保持连接的存活,它是集群中或长连接中最为有效避免网络中断的一个重要的保障措施?A:之所以说是“避免网络中断的一个重要保障措施”,原因是:我们得知公网IP是一个宝贵的资源,一旦某一连接长时间的占用并且不发数据
chen_hao
·
2019-09-25 15:00
Netty源码分析
(十一)----- 拆包器之LengthFieldBasedFrameDecoder
本篇文章主要是介绍使用LengthFieldBasedFrameDecoder解码器自定义协议。通常,协议的格式如下:LengthFieldBasedFrameDecoder是netty解决拆包粘包问题的一个重要的类,主要结构就是header+body结构。我们只需要传入正确的参数就可以发送和接收正确的数据,那么重点就在于这几个参数的意义。下面我们就具体了解一下这几个参数的意义。先来看一下Leng
chen_hao
·
2019-09-23 11:00
Netty源码分析
(十)----- 拆包器之LineBasedFrameDecoder
Netty自带多个粘包拆包解码器。今天介绍LineBasedFrameDecoder,换行符解码器。行拆包器下面,以一个具体的例子来看看业netty自带的拆包器是如何来拆包的这个类叫做LineBasedFrameDecoder,基于行分隔符的拆包器,TA可以同时处理\n以及\r\n两种类型的行分隔符,核心方法都在继承的decode方法中protectedfinalvoiddecode(Channe
chen_hao
·
2019-09-20 11:00
Netty源码分析
(九)----- 拆包器的奥秘
Netty的解码器有很多种,比如基于长度的,基于分割符的,私有协议的。但是,总体的思路都是一致的。拆包思路:当数据满足了解码条件时,将其拆开。放到数组。然后发送到业务handler处理。半包思路:当读取的数据不够时,先存起来,直到满足解码条件后,放进数组。送到业务handler处理。拆包的原理在没有netty的情况下,用户如果自己需要拆包,基本原理就是不断从TCP缓冲区中读取数据,每次读取完都需要
chen_hao
·
2019-09-19 11:00
Netty源码分析
(八)----- write过程 源码分析
上一篇文章主要讲了netty的read过程,本文主要分析一下write和writeAndFlush。主要内容本文分以下几个部分阐述一个java对象最后是如何转变成字节流,写到socket缓冲区中去的pipeline中的标准链表结构java对象编码过程write:写队列flush:刷新写队列writeAndFlush:写队列并刷新pipeline中的标准链表结构一个标准的pipeline链式结构如下
chen_hao
·
2019-09-16 11:00
Netty源码分析
(七)----- read过程 源码分析
在上一篇文章中,我们分析了processSelectedKey这个方法中的accept过程,本文将分析一下work线程中的read过程。privatestaticvoidprocessSelectedKey(SelectionKeyk,AbstractNioChannelch){finalNioUnsafeunsafe=ch.unsafe();//检查该SelectionKey是否有效,如果无效,
chen_hao
·
2019-09-12 11:00
Netty源码分析
(六)----- 客户端接入accept过程
通读本文,你会了解到1.netty如何接受新的请求2.netty如何给新请求分配reactor线程3.netty如何给每个新连接增加ChannelHandlernetty中的reactor线程netty中最核心的东西莫过于两种类型的reactor线程,可以看作netty中两种类型的发动机,驱动着netty整个框架的运转一种类型的reactor线程是boos线程组,专门用来接受新的连接,然后封装成c
chen_hao
·
2019-09-11 10:00
Netty源码分析
(五)----- 数据如何在 pipeline 中流动
在上一篇文章中,我们已经了解了pipeline在netty中所处的角色,像是一条流水线,控制着字节流的读写,本文,我们在这个基础上继续深挖pipeline在事件传播Unsafe顾名思义,unsafe是不安全的意思,就是告诉你不要在应用程序里面直接使用Unsafe以及他的衍生类对象。netty官方的解释如下Unsafeoperationsthatshouldneverbecalledfromuser
chen_hao
·
2019-09-10 15:00
Netty源码分析
(四)----- ChannelPipeline
netty在服务端端口绑定和新连接建立的过程中会建立相应的channel,而与channel的动作密切相关的是pipeline这个概念,pipeline像是可以看作是一条流水线,原始的原料(字节流)进来,经过加工,最后输出pipeline初始化在上一篇文章中,我们已经知道了创建NioSocketChannel的时候会将netty的核心组件创建出来pipeline是其中的一员,在下面这段代码中被创建
chen_hao
·
2019-09-09 11:00
Netty源码分析
(三)----- 服务端启动源码分析
本文接着前两篇文章来讲,主要讲服务端类剩下的部分,我们还是来先看看服务端的代码/***Createdbychenhaoon2019/9/4.*/publicfinalclassSimpleServer{publicstaticvoidmain(String[]args)throwsException{EventLoopGroupbossGroup=newNioEventLoopGroup(1);E
chen_hao
·
2019-09-06 11:00
Netty源码分析
(三)----- 服务端启动源码分析
本文接着前两篇文章来讲,主要讲服务端类剩下的部分,我们还是来先看看服务端的代码/***Createdbychenhaoon2019/9/4.*/publicfinalclassSimpleServer{publicstaticvoidmain(String[]args)throwsException{EventLoopGroupbossGroup=newNioEventLoopGroup(1);E
chen_hao
·
2019-09-06 11:00
Netty源码分析
(三)----- 服务端启动源码分析
本文接着前两篇文章来讲,主要讲服务端类剩下的部分,我们还是来先看看服务端的代码/***Createdbychenhaoon2019/9/4.*/publicfinalclassSimpleServer{publicstaticvoidmain(String[]args)throwsException{EventLoopGroupbossGroup=newNioEventLoopGroup(1);E
chen_hao
·
2019-09-06 11:00
上一页
3
4
5
6
7
8
9
10
下一页
按字母分类:
A
B
C
D
E
F
G
H
I
J
K
L
M
N
O
P
Q
R
S
T
U
V
W
X
Y
Z
其他