深入浅出netty
netty是高性能异步通信框架
陈彬_smile
待到山花烂漫时,她在丛中笑。
展开
-
6 Netty 架构剖析
6.1 逻辑架构Netty 采用了典型的三层网络架构进行设计和开发,逻辑架构如图 6-1 所示:Reactor 通信调度层:它由一系列辅助类完成,包括 Reactor 线程 NioEventLoop 及其父类,NioSocketChannel/ NioServerSocketChannel 及其父类, ByteBuffer 以及由其衍生出来的各种 Buffer,Unsafe 以及其衍生出的各种内部 类等。该层的主要职责就是监听网络的读写和连接操作,负责将网络层的数据读 取到内存缓冲区中,然后触发原创 2020-07-28 22:37:53 · 146 阅读 · 0 评论 -
5 Netty 线程模型
当我们讨论 Netty 线程模型的时候,一般首先会想到的是经典的 Reactor 线 程模型,尽管不同的 NIO 框架对于 Reactor 模式的实现存在差异,但本质上还是 遵循了 Reactor 的基础线程模型。下面让我们一起回顾经典的 Reactor 线程模型。5.1 Reactor 线程模型5.1.1 Reactor 单线程模型Reactor 单线程模型,是指所有的 I/O 操作都在同一个 NIO 线程上面完成。 NIO 线程的职责如下。• 作为NIO服务端,接收客户端的TCP连接原创 2020-07-28 21:06:23 · 204 阅读 · 0 评论 -
4 Netty 消息的 发送和接收
Netty 消息的读取和发送都是非阻塞模式,这是它相比于传统 BIO 最大的优势,下面我们一起分析下 Netty 是如何异步的处理读写操作的。4.1 异步读取操作NioEvnetLoop 作为 Reactor 线程,负责轮询多路复用器,获取就绪的通道执行网络的连接、客户端请求接入、读和写。当多路复用器检测到读操作后,执行如下方法:不同的 Channel 对应不同的NioUnsafe:此 处 对 应 的 是 NioByteUnsafe, 下 面 我 们 进 入 它 的 父 类AbstractN原创 2020-07-27 10:28:31 · 3349 阅读 · 0 评论 -
3 Netty 客户端创建
Netty 为了向使用者屏蔽 NIO 通信的底层细节,在和用户交互的边界做了封装,目的就是为了减少用户开发工作量,降低开发难度。Bootstrap 是 Socket客户端创建工具类,用户通过 Bootstrap 可以方便的创建 Netty 的客户端并发起异步 TCP 连接操作。客户端代码示例:package netty.netty5.client;import java.io.BufferedReader;import java.io.InputStreamReader;import i原创 2020-07-24 11:22:52 · 470 阅读 · 0 评论 -
2 Netty 服务端创建
当我们直接使用 JDK NIO 的类库开发基于 NIO 的异步服务端时,需要使用到 多 路 复 用 器 Selector、ServerSocketChannel、SocketChannel、ByteBuffer、 SelectionKey 等等,相比于传统的 BIO 开发,NIO 的开发要复杂很多,开发出稳 定、高性能的异步通信框架,一直是个难题。 Netty 为了向使用者屏蔽 NIO 通信的底层细节,在和用户交互的边界做了封 装,目的就是为了减少用户开发工作量,降低开发难度。ServerBoot...原创 2020-07-23 15:02:30 · 156 阅读 · 0 评论 -
1 Netty 入门
1.1 传统的BIO编程 网络编程的基本模型是 Client/Server 模型,也就是两个进程之间 进行相互通信,其中服务端提供位置信息(绑定的 IP 地址和监听端口),客 户端通过连接操作向服务端监听的地址发起连接请求,通过三次握手建立连 接,如果连接建立成功,双方就可以通过网络套接字(Socket)进行通信。 在基于传统同步阻塞模型开发中,ServerSocket 负责绑定 IP 地址, 启动监听端口;Socket 负责发起连接操作。连接成功之后,双方通过输入和 输出流进...原创 2020-07-22 21:43:42 · 116 阅读 · 0 评论