目录

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

Netty 网络框架概述 与 快速入门相关推荐

  1. Spring框架概述(快速入门)

    Spring 框架概述: 目录 Spring 框架概述: 1.Spring 是轻量级的开源的 javaEE 框架 2.Spring 有两个核心部分:IOC 和 AOP: 3.Spirng 特点: 4. ...

  2. CTK框架——CTK Widgets快速入门

    CTK框架--CTK Widgets快速入门 天山老妖S关注0人评论27888人阅读2018-05-25 18:40:52 CTK框架--CTK Widgets快速入门 一.CTK Widgets模块 ...

  3. Netty网络框架学习笔记-16(心跳(heartbeat)服务源码分析)

    Netty网络框架学习笔记-16(心跳(heartbeat)服务源码分析_2020.06.25) 前言: Netty 作为一个网络框架,提供了诸多功能,比如编码解码等,Netty 还提供了非常重要的一 ...

  4. web框架:Iris快速入门

    web框架:Iris快速入门 1 介绍及安装 介绍 Iris是一款用Go开发的web应用框架,被称为速度最快的Go后端开发框架. 官网地址:https://www.iris-go.com/ 中文教程地 ...

  5. 基于OkHttp 、Retrofit 、Volley 、RxJava、Novate多种网络框架整合的快速项目开发框架,一行代码实现Ftp文件上传、文件下载、文件删除和进度监听的工具类的使用

    基于OkHttp .Retrofit .Volley .RxJava.Novate多种网络框架整合的快速项目开发框架,Ftp文件上传.文件下载的工具类的使用. 依赖于Ftp的jar包,对上传.下载.删 ...

  6. 爬虫框架:Scrapy 快速入门

    文章目录 一.Scrapy简介 1.1 示例代码 1.2 示例代码的运行流程 二.安装Scrapy 2.1 Ubuntu下安装 2.2 Windows下安装 2.3 Mac OS下安装 三.Scrap ...

  7. 高性能RPC框架—----------------------Dubbo一站式快速入门

    https://blog.csdn.net/tangyang8941/article/details/88025412 一.Web应用架构的演变 ​    随着互联网的发展,网站应用的规模不断扩大,W ...

  8. 小汤学编程之JDBC(一)——JDBC概述和快速入门

    一.JDBC概述 1.概念     2.作用 二.JDBC快速入门 1.实现步骤     2.查询数据和操作数据     3.SQL注入     4.事务管理     5.Statement与Prep ...

  9. Netty系列(2)快速入门Netty线程模型、Netty入门程序、Netty任务队列

    文章目录 1 Netty线程模型 1.1 传统阻塞 I/O 服务模型 1.2 Reactor线程模型 1.2.1 单 Reactor 单线程模型 1.2.2 单Reactor多线程 1.2.3 主从 ...

  10. (一)Flume概述及快速入门

    目录 一.Flume概述 1. Flume定义 2. Flume基础架构 2.1 Agent 2.2 Source 2.3 Sink 2.4 Channel 2.5 Event 二.Flume快速入门 ...

最新文章

  1. 深度学习入门指北——从硬件到软件
  2. 推荐一个在线图片处理神奇,图片处理绝大多数需求,都能在浏览器里搞定
  3. java 计算工具类_java精确计算工具类
  4. java lstm_人人都能看懂的LSTM介绍及反向传播算法推导(非常详细)
  5. matlab语句跳转,matlab编程 跳转语句
  6. error C2360: 参数初始化操作由“case”标签跳过
  7. PC自增与转移地址计算问题总结
  8. 通过python切换hosts文件
  9. C#4.0新特性:可选参数,命名参数,Dynamic
  10. Go Get设置代理
  11. mac homebrew安装php5.3,mac mini brew安装了php54,但是我的工作php还是5.3.15?
  12. Fedora Core下声卡驱动全功略(转)
  13. 【信号检测】基于双稳随机共振微弱信号检测含Matlab源码
  14. 海思开发记录(一):3559A开发环境搭建
  15. 输入scor为80结果实验
  16. 机票价格按照淡季、旺季,头等舱和经济舱收费,输入机票原价、月份和头等舱或者经济舱 旺季(5-10月) 头等舱9折,经济舱8.5折 淡季(11-4月) 头等舱7折,经济舱6.5折
  17. Kindle2018 一周使用报告
  18. MYSQL之You can't specify target table for update in FROM clause解决办法
  19. 多屏幕多分辨率的支持和一些概念
  20. java自带的unpack闪退,java - 使用requiresUnpack无法正常使用Maven构建的Spring Boot JAR - 堆栈内存溢出...

热门文章

  1. 图像处理和计算机视觉中的经典论文(转)
  2. 【OpenGL】glFinish()和glFlush()函数详解
  3. c语言交换字符串,C语言中怎样交换两个字符串?C语言中怎样交 – 手机爱问
  4. 0832科技_iDS-MCB601-A/0832 海康威视深度学习布控枪摄像机 8-32mm 移动便携监控
  5. 拓端tecdat|R语言Black Scholes和Cox-Ross-Rubinstein期权定价模型案例
  6. springBoot笔记2
  7. ImportError: No module named ‘keras_contrib‘
  8. cv2读取带中文路径方法
  9. ubuntu源码安装tensorflow
  10. R-CNN学习笔记5:Faster R-CNN