![](https://img-blog.csdnimg.cn/20201014180756928.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
Netty
文章平均质量分 73
pan_mlpan
没有伞的孩子要努力奔跑
展开
-
Netty—基本介绍
Netty 概述 Nio存在的问题: NIO 的类库和API繁杂,使用麻烦:需要熟练掌握Selector、ServerSocketChannel、SocketChannel、ByteBuffer 需要具备其他的额外技能:要熟悉Java 多线程编程,因为 NIO 编程涉及到Reactor 模式,你必须对多线程和网络编程非常熟悉,才能编写出高质量的NIO程序。 开发工作量和难度都非常大:例如客户端面临断连重连、网络闪断、半包读写、失败缓存、网络拥塞和异常流的处理等等。 JDK NIO 的 Bug原创 2021-04-21 09:38:30 · 63 阅读 · 0 评论 -
Netty—线程模型
线程模型 不同的线程模式,对程序的性能有很大影响,为了搞清 Netty 线程模式,我们来系统的讲解下各个线程模式,最后看看 Netty 线程模型有什么优越性。 目前存在的线程模型有:传统阻塞 I/O 服务模型 Reactor 模式 根据 Reactor 的数量和处理资源池线程的数量不同,有 3 种典型的实现单 Reactor 单线程;单 Reactor多线程;主从 Reactor多线程 Netty 线程模式(Netty 主要基于主从 Reactor 多线程模型做了一定的改进,其中主从 Reactor 多线原创 2021-04-21 09:37:43 · 179 阅读 · 0 评论 -
Netty — NIO介绍
NIO NIO(Non-blocking I/O,在Java领域,也称为New I/O),是一种同步非阻塞的I/O模型,也是I/O多路复用的基础 NIO主要有三大核心部分: Channel(通道) Buffer(缓冲区) Selector(选择区) 传统IO基于字节流和字符流进行操作,而NIO基于Channel和Buffer(缓冲区)进行操作,数据总是从通道读取到缓冲区中,或者从缓冲区写入到通道中。Selector(选择区)用于监听多个通道的事件(比如:连接打开,数据到达)。因此,单个线程可以监听多个数原创 2021-04-20 10:19:59 · 109 阅读 · 0 评论 -
Netty — NIO之Selector
Selector Selector 一般称 为选择器 ,也可称为 多路复用器 。它是Java NIO核心组件中的一个,用于检查一个或多个NIO Channel(通道)的状态是否处于可读、可写。如此可以实现单线程管理多个channels,也就是可以管理多个网络链接。 一个通道在Selector上注册了,就生成了一个SelectionKey 使用Selector的好处在于: 使用更少的线程来就可以来处理通道了, 相比使用多个线程,避免了线程上下文切换带来的开销。 Selector的继承实现框图如下: 源码如原创 2021-04-20 10:18:13 · 107 阅读 · 0 评论 -
Netty — NIO之Buffer
Buffer Buffer提供了一些ByteBuffer, CharBuffer, DoubleBuffer, FloatBuffer, IntBuffer, LongBuffer, ShortBuffer,分别对应基本数据类型: byte, char, double, float, int, long, short。 对应Buffer的框架图如下: Buffer中的四个变量: capacity: 缓冲区的容量,Buffer包含元素的数量。需要满足:capacity>=0 且 不能更改 limit原创 2021-04-20 10:14:42 · 92 阅读 · 0 评论 -
Netty — NIO之Channel
Channel 一般我们将Channel称为 “通道” 。Channel类似于IO中的Stream(流)。只不过Stream是单向的,Channel是双向的,既可以用来进行读操作,又可以用来进行写操作。 channel的框架图如下: NIO中的Channel的主要实现有: FileChannel(对应文件) DatagramChannel(UDP) SocketChannel(TCP的客户端) ServerSocketChannel(TCO的服务器端) Channel的源代码: public inte原创 2021-04-20 10:11:07 · 220 阅读 · 0 评论