Netty,认识和深入(一)

Netty,认识和深入(一),第1张

Netty,认识和深入(一) Netty,认识和深入 Netty 的介绍

Netty,百度百科地址:点击跳转

Netty,官网地址地址:点击跳转

Netty, 是一款异步的事件驱动的网络应用程序框架,支持快速地开发可维护的高性能的面向协议服务器和客户端。

Netty ,是由JBOSS提供的一个JAVA开源框架,现为GIthub 项目;

Netty,是一个异步的,基于事件驱动的网络应用框架,用以快速开发高性能,高可靠性的网络IO程序;

Netty ,主要针对在TCP协议下,面向Clients 端的高并发应用,或者Peer-to-Peer场景下的大量数据持续传输的应用;

Netty,本质是一个NIO框架,适用于服务器通讯相关的多种应用场景;

Netty,结构构成大致如下:

什么是事件驱动?

百度百科地址:点击跳转

事件驱动是指在持续事务管理过程中,进行决策的一种策略,即跟随当前时间点上出现的事件,调动可用资源,执行相关任务,使不断出现的问题得以解决,防止事务堆积。在计算机编程、公共关系、经济活动等领域均有应用。

简单地说就是你点什么按钮(即产生什么事件),电脑执行什么 *** 作(即调用什么函数). 当然事件不仅限于用户的 *** 作。事件驱动的核心自然是事件。从事件角度说,事件驱动程序的基本结构是由一个事件收集器、一个事件发送器和一个事件处理器组成。事件收集器专门负责收集所有事件,包括来自用户的(如鼠标、键盘事件等)、来自硬件的(如时钟事件等)和来自软件的(如 *** 作系统、应用程序本身等)。事件发送器负责将收集器收集到的事件分发到目标对象中。事件处理器做具体的事件响应工作,它往往要到实现阶段才完全确定,因而需要运用虚函数机制(函数名往往取为类似于 HandleMsg 的一个名字)。对于框架的使用者来说,他们能够看到的是事件处理器。这也是他们所关心的内容

Netty 能做什么

有了 Netty,你可以实现自己的 HTTP 服务器,FTP 服务器,UDP 服务器,RPC 服务器,WebSocket 服务器,Redis 的 Proxy 服务器,MySQL 的 Proxy 服务器等等。如果你想知道 Nginx 是怎么写出来的,如果你想知道 Tomcat 和 Jetty 是如何实现的,如果你也想实现一个简单的 Redis 服务器,它们高性能的原理都是类似的。

传统的 HTTP 服务器的原理。

创建一个 ServerSocket,监听并绑定一个端口;

一系列客户端来请求这个端口;

服务器使用 Accept,获得一个来自客户端的 Socket 连接对象

启动一个新线程处理连接

读 Socket,得到字节流解码协议,得到 Http 请求对象处理 Http 请求,得到一个结果,封装成一个 HttpResponse 对象编码协议,将结果序列化字节流写 Socket,将字节流发给客户端

继续循环步骤 3

HTTP 服务器之所以称为 HTTP 服务器,是因为编码解码协议是 HTTP 协议,如果协议是 Redis 协议,那它就成了 Redis 服务器,如果协议是WebSocket,那它就成了 WebSocket 服务器,等等。

使用 Netty 你就可以定制编解码协议,实现自己的特定协议的服务器。

上面我们说的是一个传统的多线程服务器,这个也是 Apache 处理请求的模式。在高并发环境下,线程数量可能会创建太多, *** 作系统的任务调度压力大,系统负载也会比较高。那怎么办呢?

于是 NIO 诞生了,NIO 并不是 Java独有的概念,NIO 代表的一个词汇叫着 IO 多路复用。它是由 *** 作系统提供的系统调用,早期这个 *** 作系统调用的名字是 select,但是性能低下,后来渐渐演化成了 Linux 下的 epoll和 Mac 里的kqueue。我们一般就说是 epoll,因为没有人拿苹果电脑作为服务器使用对外提供服务。而 Netty 就是基于 Java NIO技术封装的一套框架。为什么要封装,因为原生的Java NIO使用起来没那么方便,而且还有臭名昭著的 bug,Netty 把它封装之后,提供了一个易于 *** 作的使用模式和接口,用户使用起来也就便捷多了。

Netty 特性 设计

统一的 API,适用于不同的协议(阻塞和非阻塞);

基于灵活、可扩展的事件驱动模型;

高度可定制的线程模型;

可靠的无连接数据 Socket 支持(UDP);

性能

更好的吞吐量,低延迟;

更省资源;

尽量减少不必要的内存拷贝;

安全

完整的 SSL/TLS 和 STARTTLS 的支持;

能在 Applet与 Android 的限制环境运行良好;

健壮性

不再因过快、过慢或超负载连接导致 OutOfMemoryError;

不再有在高速网络环境下 NIO 读写频率不一致的问题;

易用

完善的 JavaDoc,用户指南和样例;

简洁简单;

仅信赖于 JDK1.5;

Netty ,应用场景

官方地址,点击跳转

互联网行业
    互联网行业:在分布式系统中,各个节点之间需要远程服务调用,高性能的RPC框架必不可少,Netty作为异步高性能的通信框架,往往作为基础通信组件被这些RPC框架使用;典型的应用有:阿里分布式框架Dubbo的RPC框架使用的Dubbo协议进行节点间通信,Dubbo协议默认使用Netty作为基础通信组件,用于实现各进程节点之间的内部通信;

游戏行业
    无论是手游服务端还是大型的网络游戏,JAVA语言得到了越来越广泛的应用;Netty,作为高性能的基础通信组件,提供了TCP/UDP和HTTP协议栈,方便定制和开发私有协议栈,账号登录服务器;地图服务器之间可以方便的通过Netty进行高性能的通信;
大数据领域
    经典的Hadoop的高性能通信和序列化组件(AVRO实现数据文件共享)的RPC框架,默认采用Netty进行跨界点通信;它的Netty Service 基于Netty框架二次开发;
相关学习资料

Netty in Action-中文版,百度云盘下载地址,点击跳转 ,提取码:8hif5.6《Netty权威指南(第2版)》,百度云盘下载地址,点击跳转,提取码:a7eg

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/zaji/5707083.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-17
下一篇 2022-12-18

发表评论

登录后才能评论

评论列表(0条)

保存