
Netty
服务端开发
这个作者很懒,什么都没留下…
展开
-
Netty源码分析-BootStrap服务启动类
启动基类:AbstractBootStrap该类主要定义了客户端和服务端启动netty均需要的字段和方法,核心字段包括:EventLoopGroup:线程池,如果是服务端则在拓展类ServerBootstrap中可以选择再定义一个chilEventLoopGroup,用于处理已建立连接的客户端的请求。该线程池在服务端主要为acceptor提供执行线程,执行客户端的连接请求,而在客户端则为建立...原创 2018-12-02 19:56:35 · 4331 阅读 · 0 评论 -
Netty源码分析-线程模型与EventLoop事件循环机制
EventLoopGroup:事件处理线程池EventLoop:事件处理线程channel绑定eventLoop线程channel的IO请求处理原创 2018-12-20 15:56:13 · 2730 阅读 · 0 评论 -
Netty源码分析-Java NIO和网络通信Channel
概念Java socket之BIO和NIO在网络编程当中,在应用层主要通过Socket Api来完成客户端和服务端之间的网络通信。BIO: 在Java中,服务端使用ServerSocket监听客户端连接请求,客户端使用Socket连接服务端,ServerSocket和Socket都是BIO,即阻塞IO。阻塞IO存在的问题是任何时候,在一个线程当中只能存在一个socket进行连接,不能多个s...原创 2018-12-21 00:58:41 · 2354 阅读 · 0 评论 -
Netty源码分析-服务端创建SocketChannel的底层实现原理
概述过程NioEventLoop的selector监听到连接事件:其中ch为ServerSocketChannelServerSocketChannel的unsafe实现根据具体的ServerSocketChannel的实现,以下以NioServerSocketChannel为例:由1知,调用的是unsafe.read(),具体read实现如下:(1)doReadMessages...原创 2018-12-22 00:22:18 · 2873 阅读 · 0 评论 -
Netty客户端channel主动关闭时,服务端感知并关闭channel的过程
客户端主动关闭连接,服务端关闭channel的过程在服务端中,在AbstractChannel#AbstractUnsafe的close(final ChannelPromise promise)方法上设置断点:这个是比较顶层的方法。往下看底层开始时的调用栈:在selector接收到该channel的读写事件时,调用processSelectedKey处理进行处理,如下可知,此时产...原创 2019-01-14 23:49:05 · 33909 阅读 · 0 评论 -
Netty源码分析-数据拦截和处理管道ChannelPipeline的设计
概念原创 2018-12-22 14:55:09 · 3492 阅读 · 0 评论 -
Netty源码分析-数据处理器ChannelHandler的设计
概述原创 2018-12-23 00:28:18 · 3263 阅读 · 0 评论 -
Netty源码分析-数据处理器ChannelInboundHandler和ChannelOutboundHandler
概述Channel接口针对Channel的读入和写出IO事件的处理,定义了两个拓展接口:ChannelInboundHandler用于定义对读入IO事件的处理,ChannelOutboundHandler用于定义写出IO事件的处理。ChannelInboundHandlerChannelInboundHandler接口定义/** * {@link ChannelHandler} whic...原创 2018-12-23 15:01:32 · 8271 阅读 · 1 评论 -
Netty源码分析-ChannelHandler的包装器-ChannelHandlerConext
概念ChannelHandler的职责主要是定义对Channel中IO数据的处理逻辑,主要是面向业务逻辑的处理,只需按业务需要的数据处理顺序,通过调用ChannelPipeline的addLast等方法,添加到ChannelPipeline中即可,无需关心多个ChannelHandler在ChannelPipeline中如何联系起来的,这个工作由ChannelHandlerContext完成。...原创 2018-12-22 20:16:16 · 2471 阅读 · 0 评论 -
Netty源码分析-基于Netty的心跳检测机制IdleStateHandler实现长连接
将timeout包的IdleStateHandler放到pipeline中,用于检测channel的空闲超时事件,即可以指定channel多久没有read或者write操作,则触发读写超时IO事件,原创 2018-12-23 17:08:42 · 4268 阅读 · 0 评论 -
Netty源码分析-缓冲区Buffer体系结构设计
概念Netty的缓冲区Buffer是一个与Netty框架相对独立的模块,在Java NIO中使用ByteBuffer作为缓冲区实现,但是ByteBuffer是使用单指针position来控制对缓冲区的读写操作的,在读写之间需用通过flip函数来切换position指针,若忘记调用flip,则可能在写了之后读不出来,用法比较繁琐,而且容易出错,关于Java NIO的设计,可以参考我的另外一篇文章...原创 2019-01-01 02:21:10 · 4690 阅读 · 0 评论 -
Netty源码分析-Channel对Buffer的堆内存和直接内存的使用
Channel的Unsafe对Buffer的使用在Channel的接口体系设计中,Channel只是与ChannelHandler,ChannelHandlerContext,ChannelPipeline完成对数据的处理,而不直接参与和底层socket进行数据交互,是通过一个内部Unsafe的接口设计来完成这项工作。如对于数据读取,在Channel的实现中拿到的是Unsafe已经读取回来的...原创 2019-01-04 00:04:54 · 6109 阅读 · 0 评论 -
Netty源码分析-Netty4缓冲区Buffer性能优化之Pooled池化机制
性能优化:在对象引用之上的对象池化机制在对象引用的实现中,每当一个Buffer实例没有被引用时,则会销毁该对象实例,如被GC回收,但是Buffer对象创建时的内存分配开销是比较大的,如果频繁创建Buffer对象,频繁进行内存分配释放,则开销较大,影响性能,故在netty4中新增了对象池化机制,即Buffer对象没有被引用时,可以放到一个对象缓存池中,而不是马上销毁,当需要时,则重新从对象缓存池...原创 2019-01-01 17:45:23 · 7034 阅读 · 0 评论