
Netty
文章平均质量分 95
Project Netty
A__Plus
这个作者很懒,什么都没留下…
展开
-
Netty4.0的线程私有变量FastThreadLocal实现原理解析
一、引言Netty实现了自己的线程私有变量机制FastThreadLocal,相比于JDK的ThreadLocal,Netty的FastThreadLocal能够始终以O(1)的速度来查找对应的变量。Netty实现了java.lang.Thread子类FastThreadLocalThread来保证能够使用FastThreadLocal,FastThreadLocalThread持有一个Int...原创 2018-11-01 18:19:31 · 598 阅读 · 0 评论 -
Netty4.0源码解析:字节容器UnpooledHeapByteBuf
一、引言Java NIO提供了ByteBuffer作为字节容器,供Channel读入和写入数据。但ByteBuffer使用过于繁琐,灵活性不够强。Netty实现了ByteBuf来替代JDK的ByteBuffer。ByteBuf有以下几大优点:1、它可以被用户自定义的缓冲区类型扩展2、通过内置的复合缓冲区类型实现了透明的零拷贝3、容量可以按需增长4、读写切换无需调用ByteBuffer的...原创 2018-10-31 18:02:38 · 2236 阅读 · 0 评论 -
Netty4.0源码解析:NioServerSocketChannel
一、引言Netty的Channel在JDK NIO的Channel基础上做了一层封装,提供了更多的功能。Netty的中的Channel实现类主要有:NioServerSocketChannel(用于服务端非阻塞地接收TCP连接)、NioSocketChannel(用于维持非阻塞的TCP连接)、NioDatagramChannel(用于非阻塞地处理UDP连接)、OioServerSocketCha...原创 2018-10-28 17:07:04 · 1507 阅读 · 0 评论 -
Netty4.0源码解析:管道模型ChannelPipeline
一、引言在Netty中每个Channel都持有一个ChannelPipeline,ChannelPipeline持有多个ChannelHandler用于处理IO事件,这些ChannelHandler的顺序由一个双向链表维护,双向链表的头尾结点为HeadContext的实例和TailContext实例。双向链表由ChannelHandler持有的ChannelHandlerContext绑定。...原创 2018-10-27 14:48:34 · 839 阅读 · 0 评论 -
Netty4.0源码分析:NioEventLoop/NioEventLoopGroup的任务处理流程
一、引言在上篇文章中我们讨论了NioEventLoop/NioEventLoopGroup的构造过程,这篇文章我们来分析NioEventLoop/NioEventLoopGroup的运行过程。二、源码解析在Netty中,NioEventLoop(包括所有的SingleThreadEventExecutor子类)有两个职责:一是作为IO线程处理IO事件,二是作为普通的线程处理通过execute...原创 2018-10-26 11:22:33 · 1098 阅读 · 0 评论 -
Netty4.0源码解析:NioEventLoop/NioEventLoopGroup的初始化
一、引言Netty程序在启动时,需要指定最少一个EventLoopGroup实例(服务端引导可以指定2个,客户端引导只能指定1个)。一般情况下我们指定的EventLoopGroup实现类都是NioEventLoopGroup。在了解NioEventLoopGroup的作用及其内部实现原理之前,我们先来复习下Reactor线程模型:Reactor线程模型有三种类型:单线程模型、多线程模型和主从线...原创 2018-10-23 19:32:41 · 1166 阅读 · 0 评论 -
Netty4.0源码分析:服务端启动过程
一、引言服务端启动和客户端启动大致上是相同的,不过服务端一般需要绑定两个EventLoopGroup,一个EventLoopGroup专门负责接收连接,另外一个EventLoopGroup用来处理连接后的客户端。public static void main(String[] args) throws InterruptedException { ServerBootstrap boot =...原创 2018-10-21 18:38:31 · 368 阅读 · 1 评论 -
Netty4.0源码分析:客户端的启动过程
一、引言开始学习Netty源码可以从它的启动过程入手。Netty客户端的启动需要构造一个io.netty.bootstrap.Bootstrap类,并可以通过它设置一系列参数。我们从下面这个代码入手:public static void main(String[] args) throws InterruptedException { Bootstrap boot = new Bootst...原创 2018-10-20 23:11:50 · 634 阅读 · 1 评论 -
Netty实现HTTP服务端
一、处理HTTP请求Netty作为一款优秀的网络编程框架,自然提供了实现HTTP服务的解决方案。 对于HTTP服务端而言,其引导过程和很多Netty服务端应用程序几乎一摸一样,唯一不同的是编解码器。 Netty提供了以下编解码器实现对HTTP请求的解析。 1、HttpRequestDecoder:一般放在进站处理器当中的第一个,解码完成后会将处理好的HttpRequest对象传送给下一个...原创 2018-08-07 15:08:12 · 1529 阅读 · 0 评论 -
如何构建一个简单的基于Netty的C/S架构网络应用程序
一、前言在基于C/S架构的应用程序中,对于服务端我们需要实现的功能通常有:保持长连接并随时接收客户端发送的请求能够主动向客户端发送响应信息能够实现客户端到客户端信息的传输对于客户端: - 保持和服务器的长连接 - 能够主动向服务器发送消息 - 能随时接收服务器的响应下面我们来讨论如何实现上面的功能(最后会附上一个基于C/S的网盘程序)二、服务端(1)...原创 2018-06-06 22:05:21 · 1703 阅读 · 3 评论 -
初步了解Netty核心组件:Channel、ChannelHandler和ChannelPipeline
1、Channel这里的Channel与JDK中的Channel有所区别,Netty的Channel在JDK的基础上进行了封装并赋予了更多的功能,用户可以使用Channel进行一下操作: 查询Channel状态和配置Channel的参数 进行IO操作(read\write\connect\bind)Channel接口大大降低了直接使用Socket类的复杂性,Chann...原创 2018-06-02 16:34:22 · 1829 阅读 · 0 评论