Netty权威指南
文章平均质量分 95
Netty权威指南(Hadoop、Storm、Spark、Facebook、Twitter、阿里巴巴都在使用的Java高性能NIO通信框架
一直不懂
笔记
展开
-
【Netty权威指南】21-Netty配置参数表
Netty配置参数表 配置参数名 功能说明 io.netty.allocator.numHeapArenas 内存池堆内存内存区域的个数。默认值: Math.min(runtime.availableProcessors(), Runtime.getRuntime().maxMemory()/defaultChunkSize/2/3) io.netty.alloc...转载 2019-05-15 15:31:09 · 3911 阅读 · 0 评论 -
【Netty权威指南】20-安全性
1、Netty SSL安全特性JDK的安全类库提供了 javax.net.ssl.SSLSocket和javax.net.ssl.SSLServerSocket类库用于支持SSL/TLS安全传输,对于NIO非阻塞 Socket通信,JDK并没有提供现成可用的类库简化用户开发。Netty通过JDK的 SSLEngine,以 SslHandler的方式提供对SSL/TLS安全传输的支持,极大的简...转载 2019-05-15 15:09:13 · 1042 阅读 · 3 评论 -
【Netty权威指南】19-可靠性
作为一个基础的NIO通信框架, Netty被广泛应用于大数据处理、互联网消息中间件游戏和金融行业等。不同的行业对软件的可靠性需求不同,例如对通信软件的可靠性要求往往需要达到5个9。1、Netty可靠性需求我们从Netty的主要应用场景和Netty的运行环境两个维度分析 Netty的可靠性需求。首先分析 Netty的主要应用场景。Netty的主要应用场景如下。1.RPC框架的基础网络...转载 2019-05-08 18:44:06 · 1335 阅读 · 0 评论 -
【Netty权威指南】18-高性能之道
1、RPC调用性能模型分析1.1、传统RPC调用性能差的三宗罪"罪行”一:网络传输方式问题。传统的RPC框架或者基于RMI等方式的远程服务(过程)调用采用了同步阻塞IO,当客户端的并发压力或者网络时延增大之后,同步阻塞IO会由于频繁的wait导致IO线程经常性的阻塞,由于线程无法高效的工作,IO处理能力自然下降。采用BIO通信模型的服务端,通常由一个独立的 Acceptor线程负责监听客...转载 2019-05-06 14:39:57 · 366 阅读 · 0 评论 -
【Netty权威指南】17-Java多线程编程在Netty中的应用
作为异步事件驱动、高性能的NIO框架,Netty代码中大量运用了Java多线程编程技巧。并发编程处理的恰当与否,将直接影响架构的性能。1、Java内存模型与多线程编程1.1、硬件的发展和多任务处理随着硬件,特别是多核处理器的发展和价格的下降,多任务处理已经是所有操作系统必备的一项基本功能。在同一个时刻让计算机做多件事情,不仅是因为处理器的并行计算能力得到了很大提升,还有一个重要的原因是...转载 2019-05-05 17:55:27 · 1165 阅读 · 0 评论 -
【Netty权威指南】16-Netty架构剖析
1、Netty逻辑架构Netty采用了典型的三层网络架构进行设计和开发,逻辑架构如图20-1所示。1.1、Reactor通信调度层它由一系列辅助类完成,包括 Reactor线程 NioEventLoop及其父类, NioSocketChannel、NioServerSocketChannel及其父类, ByteBuffer以及由其衍生出来的各种 Buffer, Unsafe以及其衍生出...转载 2019-05-05 15:54:53 · 333 阅读 · 0 评论 -
【Netty权威指南】15-Future和Promise
1、Future功能Future最早来源于JDK的java.util.concurrent.Future,它用于代表异步操作的结果。相关API如图19-1所示。可以通过get方法获取操作结果,如果操作尚未完成,则会同步阻塞当前调用的线程;如果不允许阻塞太长时间或者无限期阻塞,可以通过带超时时间的get方法获取结果;如果到达超时时间操作仍然没有完成,则抛出 TimeoutException...转载 2019-05-05 14:29:24 · 4710 阅读 · 4 评论 -
【Netty权威指南】14-NioEventLoop和NioEventLoopGroup
1、Netty的线程模型当我们讨论 Netty线程模型的时候,一般首先会想到的是经典的 Reactor线程模型,尽管不同的NIO框架对于 Reactor模式的实现存在差异,但本质上还是遵循了 Reactor的基础线程模型。下面让我们一起回顾经典的 Reactor线程模型。1.1、Reactor单线程模型Reactor单线程模型,是指所有的IO操作都在同一个NIO线程上面完成。NIO线...转载 2019-04-30 17:29:47 · 13445 阅读 · 5 评论 -
【Netty权威指南】13-ChannelPipeline和ChannelHandler
Netty的 ChannelPipeline和 Channelhandler机制类似于 Servlet和 Filter过滤器,这类拦截器实际上是职责链模式的一种变形,主要是为了方便事件的拦截和用户业务逻辑的定制。Netty的 Channel过滤器实现原理与 Servlet Filter机制一致,它将 Channe的数据管道抽象为 ChannelPipeline,消息在ChannelPipelin...转载 2019-04-25 16:22:49 · 1014 阅读 · 0 评论 -
【Netty权威指南】12-Channel和Unsafe
类似于NIO的 Channel,Netty提供了自己的 Channel和其子类实现,用于异步I/O操作和其他相关的操作。Unsafe是个内部接口,聚合在 Channel中协助进行网络读写相关的操作,因为它的设计初衷就是 Channel的内部辅助类,不应该被Netty框架的上层使用者调用,所以被命名为 Unsafe。这里不能仅从字面理解认为它是不安全的操作,而要从整个架构的设计层面体会它的设计初衷...转载 2019-04-15 16:29:39 · 998 阅读 · 0 评论 -
【Netty权威指南】11-ByteBuf
1、ByteBuf功能说明当我们进行数据传输的时候,往往需要使用到缓冲区,常用的缓冲区就是 JDK NIO类库提供的 java.nio.Buffer。实际上,7种基础类型( Boolean除外)都有自己的缓冲区实现。对于NlO编程而言,我们主要使用的是 ByteBuffer。从功能角度而言, ByteBuffer完全可以满足NlO编程的需要,但是由于NIO编程的复杂性, ByteBuffer...转载 2019-04-10 16:44:16 · 1306 阅读 · 0 评论 -
【Netty权威指南】10-Netty客户端创建分析
1、Netty客户端创建流程分析Netty为了向使用者屏蔽NlO通信的底层细节,在和用户交互的边界做了封装,目的就是为了减少用户开发工作量,降低开发难度。 Bootstrap是 Socket客户端创建工具类,用户通过 Bootstrap可以方便地创建 Netty的客户端并发起异步TCP连接操作。1.1、Netty客户端创建时序图1.2、Netty客户端创建流程分析步骤1:用户线...转载 2019-04-02 21:11:35 · 452 阅读 · 0 评论 -
【Netty权威指南】09-Netty服务端创建分析
1、Netty服务端创建源码分析当我们直接使用 JDK NIO的类库开发基于NIO的异步服务端时,需要使用到多路复用器 Selector、 ServerSocketChannel、 SocketChannel、 ByteBuffer、 SelectionKey等,相比于传统的BIO开发,NIO的开发要复杂很多,开发出稳定、高性能的异步通信框架,一直是个难题,Netty为了向使用者屏蔽NlO通信...转载 2019-03-31 14:49:29 · 357 阅读 · 0 评论 -
【Netty权威指南】08-Netty私有协议栈开发
1、Netty协议栈功能设计1.1、协议栈功能描述Netty协议栈承载了业务内部各模块之间的消息交互和服务调用,它的主要功能如下。(1)基于Netty的NIO通信框架,提供高性能的异步通信能力;(2)提供消息的编解码框架,可以实现POJO的序列化和反序列化;(3)提供基于IP地址的白名单接入认证机制;(4)链路的有效性校验机制;(5)链路的断连重连机制。1.2、通信模型...转载 2019-03-19 15:56:17 · 513 阅读 · 3 评论 -
【Netty权威指南】07-Netty WebSocket协议开发
1、WebSocket服务端功能介绍WebSocket服务端的功能如下:支持 WebSocket的浏览器通过 WebSocket协议发送请求消息给服务端,服务端对请求消息进行判断,如果是合法的 WebSocket请求,则获取请求消息体(文本),并在后面追加字符串“欢迎使用 Netty WebSocket服务,现在时刻:系统时间”。客户端HTML通过内嵌的JS脚本创建 WebSocket连接,...转载 2019-03-18 15:03:23 · 495 阅读 · 0 评论 -
【Netty权威指南】06-Http协议开发应用
1、Netty Http服务端入门开发由于Netty天生是异步事件驱动的架构,因此基于NIOTCP协议栈开发的HTTP协议栈也是异步非阻塞的。Netty的HTTP协议栈无论在性能还是可靠性上,都表现优异,非常适合在非Web容器的场景下应用,相比于传统的 Tomcat、Jetty等web容器,它更加轻量和小巧,灵活性和定制性也更好。1.1、HTTP服务端例程场景描述我们以文件服务器为例...转载 2019-03-17 18:40:26 · 572 阅读 · 0 评论 -
【Netty权威指南】05-分隔符和定长解码器的应用
TCP以流的方式进行数据传输,上层的应用协议为了对消息进行区分,往往采用如下4种方式。消息长度固定,累计读取到长度总和为定长LEN的报文后,就认为读取到了个完整的消息:将计数器置位,重新开始读取下一个数据报: 将回车换行符作为消息结束符,例如FTP协议,这种方式在文本协议中应用比较广泛; 将特殊的分隔符作为消息的结束标志,回车换行符就是一种特殊的结束分隔符; 通过在消息头中定义长度字段来...转载 2019-03-17 17:15:39 · 238 阅读 · 0 评论 -
【Netty权威指南】04-TCP粘包/拆包问题的解决之道
1、TCP粘包/拆包TCP是个“流”协议,所谓流,就是没有界限的一串数据。大家可以想想河里的流水它们是连成一片的,其间并没有分界线。TCP底层并不了解上层业务数据的具体含义,它会根据TCP缓冲区的实际情况进行包的划分,所以在业务上认为,一个完整的包可能会被TCP拆分成多个包进行发送,也有可能把多个小的包封装成一个大的数据包发送,这就是所谓的TCP粘包和拆包问题。1.1、TCP粘包/拆包问题...转载 2019-03-17 11:29:40 · 711 阅读 · 0 评论 -
【Netty权威指南】03-Netty入门应用
1、Netty时间服务器服务端 TimeServerpackage com.phei.netty.basic;import io.netty.bootstrap.ServerBootstrap;import io.netty.channel.ChannelFuture;import io.netty.channel.ChannelInitializer;import io.netty...转载 2019-03-15 17:43:01 · 256 阅读 · 0 评论 -
【Netty权威指南】02-NIO入门
1、传统的BIO编程网络编程的基本模型是 Client/Server模型,也就是两个进程之间进行相互通信,其中服务端提供位置信息(绑定的IP地址和监听端口),客户端通过连接操作向服务端监听的地址发起连接请求,通过三次握手建立连接,如果连接建立成功,双方就可以通过网络套接字(Socket)进行通信。在基于传统同步阻塞模型开发中, ServerSocket负责绑定IP地址,启动监听端口Socke...转载 2019-03-15 11:55:50 · 340 阅读 · 0 评论 -
【Netty权威指南】01-Linux网络模型简介
Linux的内核将所有外部设备都看做一个文件来操作,对一个文件的读写操作会调用内核提供的系统命令,返回一个 file descriptor(fd,文件描述符)。而对一个 socket的读写也会有相应的描述符,称为 socketfd( socket描述符),描述符就是一个数字,它指向内核中的一个结构体(文件路径,数据区等一些属性)。根据UNIX网络编程对I/O模型的分类,UNIX提供了5种I/O模...转载 2019-03-14 11:51:01 · 1393 阅读 · 0 评论