Netty 网络框架概述 与 快速入门

目录

Netty 网络框架概述

Netty 编码快速入门

Spring boot + Netty 发送消息


Netty 官网地址:http://netty.io/
GitHub 托管地址:https://github.com/netty/netty
Netty  用户指南官网地址:https://netty.io/wiki/user-guide.html
Netty 4.0 官网开发文档地址:https://netty.io/4.0/api/index.html
Netty 4.1 官网开发文档地址:https://netty.io/4.1/api/index.html

本文环境:Java jdk 1.8 + Netty-all 4.1.30.Final + Spring boot 2.3.5.RELEASE

Netty 网络框架概述

1、Netty 是 JBoss 公司用 Java 写的一个 Jar 包(库),目的是快速开发高性能、高可靠性的网络服务器和客户端程序

2、Netty 提供异步、无阻塞、事件驱动的网络应用程序框架和工具

4、Netty 是目前公认的网络编程最好的框架,官网地址:http://netty.io/

5、GitHub 托管地址:https://github.com/netty/netty

6、Netty 底层封装的也是 Java 的 NIO,所以也叫 NIO 框架,常用于开发分布式系统。

7、《Netty 权威指南》下载地址:https://download.csdn.net/download/wangmx1993328/10717896.

Netty Features( 特色)

Design( 设计)统一的 API,适用于不同的协议(阻塞和非阻塞)
基于灵活、可扩展的事件驱动模型
高度可定制的线程模型,单线程、多线程池
可靠的无连接数据Socket支持(UDP)
Ease of use( 易用性)

丰富的 JavaDoc(开发文档)、用户指南、以及示例
没有额外的依赖关系,JDK 5 配套 Netty 3.x,JDK 6 及以上的 配套 Netty 4.x。
用户指南官网地址:https://netty.io/wiki/user-guide.html
Netty 4.0 官网开发文档地址:https://netty.io/4.0/api/index.html
Netty 4.1 官网开发文档地址:https://netty.io/4.1/api/index.html

最早 Java 网络编程:使用 java.net + java.io,熟悉的 Socket API 就是在 java.net 包中。
从 JDK 1.4 开始,Java 网络编程可以使用性能更好的:java.nio
目前 Java 网络编程通常使用成熟的框架,如:Netty 、Mina,Grizzly

Performance( 性能)更好的吞吐量,低延迟 (Better throughput, lower latency)
更省资源 (Less resource consumption)
尽量减少不必要的内存拷贝 (Minimized unnecessary memory copy)
不再因过快、过慢或超负载连接导致 OutOfMemoryError
不再有在高速网络环境下 NIO 读写频率不一致的问题
Security( 安全)完整的 SSL/TLS 和 STARTTLS 的支持 (Complete SSL/TLS and StartTLS support)
能在 Applet 与 Android 的限制环境运行良好

Netty VS Mina

1、JBOOS 的 Netty 与 Apache 的 Mima 都是目前 Java 网络编程主流的框架之一。
2、Mina 将内核和一些特性的联系过于紧密,使得用户在不需要这些特性的时候无法脱离,相比之下性能会有所下降,而 Netty解决了这个设计问题
3、Netty 的文档更清晰,很多 Mina 的特性在 Netty 里都有
4、Netty 更新周期更短,新版本的发布比较快
5、两者架构差别不大,Mina 靠 apache生存,而 Netty 靠 jboss,和 jboss 的结合度非常高,Netty 有对 google protocal buf 的支持,有更完整的 ioc 容器支持( spring,guice,jbossmc 和 osgi);
6、Netty 比 Mina 使用起来更简单,Netty 中可以自定义的处理 upstream events 和 downstream events,可以使用 decoder 和encoder 来解码和编码发送内容
7、Netty 和 Mina 在处理 UDP 时有一些不同,Netty 将 UDP 无连接的特性暴露出来;而 Mina 对 UDP 进行了高级层次的抽象,可以把 UDP 当成"面向连接"的协议,而要 Netty 做到这一点比较困难。

应用领域

一:互联网行业

1、随着网站规模的不断扩大,系统并发访问量也越来越高,传统基于 Tomcat 等 Web 容器的垂直架构已经无法满足需求,需要拆分应用进行服务化,以提高开发和维护效率。从组网情况看,垂直的架构拆分之后,系统采用分布式部署,各个节点之间需要远程服务调用,高性能的 RPC(Remote Procedure Call Protocol-远程过程调用协议) 框架必不可少,Netty 作为异步高性能的通信框架,往往作为基础通信组件被这些 RPC 框架使用。

2、典型的应用有:阿里分布式服务框架 Dubbo 的 RPC 框架使用 Dubbo 协议进行节点间通信,Dubbo 协议默认使用 Netty 作为基础通信组件,用于实现各进程节点之间的内部通信,它的架构图如下:

3、其中,服务提供者和服务消费者之间,服务提供者、服务消费者和性能统计节点之间使用 Netty 进行异步/同步通信。

4、除了 Dubbo 之外,淘宝的消息中间件 RocketMQ 的消息生产者和消息消费者之间,也采用 Netty 进行高性能、异步通信。

5、除了阿里系和淘宝系之外,很多其它的大型互联网公司或者电商内部也已经大量使用 Netty 构建高性能、分布式的网络服务器。

二:游戏行业

1、无论是手游服务端、还是大型的网络游戏,Java 语言得到了越来越广泛的应用。Netty 作为高性能的基础通信组件,它本身提供了 TCP/UDP 和 HTTP 协议栈,非常方便定制和开发私有协议栈。

2、账号登陆服务器、地图服务器之间可以方便的通过 Netty 进行高性能的通信,架构示意图如下:

三:大数据领域

1、经典的 Hadoop 的高性能通信和序列化组件 Avro 的 RPC 框架,默认采用 Netty 进行跨节点通信,它的 Netty Service 基于 Netty 框架二次封装实现。

2、大数据计算往往采用多个计算节点和一个/N个汇总节点进行分布式部署,各节点之间存在海量的数据交换。由于 Netty 的综合性能是目前各个成熟 NIO 框架中最高的,因此,往往会被选中用作大数据各节点间的通信。

四:通信行业

1、Netty 的异步高性能、高可靠性和高成熟度的优点,使它在通信行业得到了大量的应用。

Netty 编码快速入门

1、进入 Netty 官网,鼠标悬停在 "Downloads" 上,可以下载二进制 Jar 包,其中有一个 netty-example-x.x.x.Final.jar 的示例包,其中提供了大量的示例,非常适合学习。

2、如果使用 Maven 进行项目开发管理,则可以从 Netty 官网下载页中获取,或者从 Maven 官方仓库获取。

<!-- https://mvnrepository.com/artifact/io.netty/netty-all -->
<dependency>
    <groupId>io.netty</groupId>
    <artifactId>netty-all</artifactId>
    <version>4.1.30.Final</version>
</dependency>

3、先实现一个简单收发消息:开启服务器->开启客户端->给服务器发送一条消息->服务器接收消息并回复->客户端收到回复然后关闭退出(暂时不考虑读半包情况)。

4、在线演示源码:

https://gitee.com/wangmx1993/java-se/tree/master/src/main/java/org/example/netty/helloWorld

5、先运行服务端,再运行客户端:

Spring boot + Netty 发送消息

1、在上面的基础上稍作修改,实现从页面输入消息内容,然后调用 Controller 接口,接着连接 Netty 服务器并发送消息,然后收到回复,关闭连接,返回给页面.

2、在启动类 @SpringBootApplication 的 main 方法中启动 Netty 服务。

在线演示源码:

https://gitee.com/wangmx1993/java-se/blob/master/src/main/java/org/example/JavaseApplication.java

https://gitee.com/wangmx1993/java-se/blob/master/src/main/java/org/example/netty/springBoot

评论 16
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

蚩尤后裔-汪茂雄

芝兰生于深林,不以无人而不芳。

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值