当前位置:首页 > Web开发 > 正文

主要目的是提高内存的使用率

2024-03-31 Web开发

标签:

Netty架构道理,不怕你看不懂!

https://mp.weixin.qq.com/s/UIZL78m105btP2HWFmQmlw

  

原创: 崔皓 51CTO技术栈 2019-12-06

在漫衍式系统被广泛应用的今天,处事有可能漫衍在网络中的各个节点中。因此,处事之间的挪用对漫衍式系统来说,就显得尤为重要。


技术图片

图片来自 Pexels


对付高性能的 RPC 框架,Netty 作为异步通信框架,几乎成为必备品。例如,Dubbo 框架中通信组件,还有 RocketMQ 中出产者和消费者的通信,都使用了 Netty。今天,我们来看看 Netty 的根基架谈判道理。

Netty 的特点与 NIO


Netty 是一个异步的、基于事件驱动的网络应用框架,它可以用来开发高性能处事端和客户端。


以前编写网络挪用措施的时候,我们城市在客户端创建一个 Socket,通过这个 Socket 连接随处事端。


处事端按照这个 Socket 创建一个 Thread,用来发出请求。客户端在倡议挪用以后,需要期待处事端措置惩罚惩罚完成,才华继续后面的操纵。这样线程会呈现期待的状态。


如果客户端请求数越多,处事端创建的措置惩罚惩罚线程也会越多,JVM 如此多的线程并不是一件容易的事。

技术图片

使用阻赛 I/O 措置惩罚惩罚多个连接


为了解决上述的问题,推出了 NIO 的观点,也就是(Non-blocking I/O)。此中,Selector 机制就是 NIO 的核心。


当每次客户端请求时,会创建一个 Socket Channel,并将其注册到 Selector 上(多路复用器)。

然后,Selector 存眷处事端 IO 读写事件,此时客户端并不用期待 IO 事件完成,可以继续做接下来的事情。


一旦,处事端完成了 IO 读写操纵,Selector 会接到通知,同时报告客户端 IO 操纵已经完成。


接到通知的客户端,就可以通过 SocketChannel 获取需要的数据了。

技术图片

NIO 机制与 Selector

上面描述的过程有点异步的意思,不过,Selector 实现的并不是真正意义上的异步操纵。


因为 Selector 需要通过线程梗阻的方法监听 IO 事件变换,只是这种方法没有让客户端期待,是 Selector 在期待 IO 返回,并且通知客户端去获取数据。真正“异步 IO”(AIO)这里不展开介绍,有兴趣可以自行查找。

说好了 NIO 再来谈谈 Netty,Netty 作为 NIO 的实现,它适用于处事器/客户端通讯的场景,以及针对付 TCP 协议下的高并发应用。


对付开发者来说,它具有以下特点:

对 NIO 进行封装,开发者不需要存眷 NIO 的底层道理,只需要挪用 Netty 组件就能够完成事情。

对网络挪用透明,从 Socket 成立 TCP 连接到网络异常的措置惩罚惩罚都做了包装。

对数据措置惩罚惩罚灵活, Netty 撑持多种序列化框架,通过“ChannelHandler”机制,可以自界说“编/解码器”。

对性能调优友好,Netty 供给了线程池模式以及 Buffer 的重用机制(东西池化),不需要构建庞大的多线程模型和操纵行列队伍。

 

从一个简单的例子开始


开篇讲到了,为了满足高并发下网络请求,引入了 NIO 的观点。Netty 是针对 NIO 的实现,在 NIO 封装,网络挪用,数据措置惩罚惩罚以及性能优化等方面都有不俗的表示。
学习架构最容易的方法就是从实例入手,从客户端访谒处事真个代码来看看 Netty 是如何运作的。再一次介绍代码中挪用的组件以及组件的事情道理。
假设有一个客户端去挪用一个处事端,假设处事端叫做 EchoServer,客户端叫做 EchoClient,用 Netty 架构实现代码如下。

处事端代码


构建处事器端,假设处事器接受客户端传来的信息,然后在控制台打印。首先,生成 EchoServer,在结构函数中传入需要监听的端标语。

温馨提示: 本文由Jm博客推荐,转载请保留链接: https://www.jmwww.net/file/web/31512.html