ReturnTmp's Blog ReturnTmp's Blog
首页
基础课程
编程语言
框架技术
运维笔记
人工智能
随笔摘录
  • 友链
关于
收藏
  • 分类
  • 标签
  • 归档
GitHub (opens new window)

ReturnTmp

分享有趣好玩的计算机知识
首页
基础课程
编程语言
框架技术
运维笔记
人工智能
随笔摘录
  • 友链
关于
收藏
  • 分类
  • 标签
  • 归档
GitHub (opens new window)
  • GLIBC_2.28 not found 问题解决
  • Monorepo 多项目单仓库
  • Renovate 第三方依赖更新监控
  • 【IDEA】Maven 构建项目生成文件解析
  • K8s

  • Zotero 使用指南
  • package-lock.json 是否提交问题
  • 『ARM』和『x86』处理器架构解析指南
  • GlassFish 安装配置
  • 手把手教你安装配置『Oracle Database 19c』
  • Oracle Database 19c 彻底卸载
  • 语雀故障回顾
  • OpenStack 云计算平台 Nova 计算服务学习指南
  • Vue devServer 教程
  • Swagger 导出 API 文档
  • MapStruct POJO 映射框架指南
  • IDEA 代码热部署和热加载
  • SpringBoot 启动参数配置
  • Nacos 入门指南
  • seleuim 指南
  • Spring 服务降级熔断
  • Maven BOM 解析
  • .vscode 文件夹
  • Spring Security Token 认证
  • SpringBoot 基于 Actuator 和 Admin 实现应用监控管理
  • SPM/SCM 流量跟踪体系
  • Netty 入门
    • 前言
      • 介绍
      • 应用场景
      • 预备知识
    • I/O 模型
      • BIO
      • NIO
      • AIO
    • 安装
    • 参考链接
  • Flyway 数据库版本管理实战指南
  • Swagger 2 和 3 安装区别
  • MP 配置分页
  • MySQL 分库分表
  • Git Commit 提交规范,变更日志、版本发布自动化和 Emoji 提交标准
  • VSCode 插件 i18n Ally 进行国家化配置
  • Vue3 组合式 全局挂载
  • TS 教程
  • 架构解析:同城双活、异地多活、单元化架构
  • Spring 跨域配置
  • SpringCloud 微服务实战
  • Sentinel 流量治理组件教程
  • leetcode 上分
  • JMeter 压测
  • Netty IM 系统
  • IDEA 插件开发
  • SpringBoot 邮件服务 集成配置 详解
  • Maven 依赖包冲突问题解决
  • 社区项目 forest 修改
  • Maven 项目命名规范
  • 新版 PyCharm 设置 Conda 虚拟环境
  • 框架工具
ReturnTmp
2023-11-26
目录

Netty 入门

# 前言

# 介绍

官网首页:Netty: Home (opens new window)

Netty 是一个异步事件驱动的网络应用框架,用于快速开发可维护的高性能服务器和客户端

Netty 是由 JBOSS 提供的 Java 开源框架,现为 GitHub 上的独立项目,它是一个异步的、基于事件驱动的网络应用框架,用于快速开发高性能、高可靠性的网络 IO 程序,主要针对在 TCP 协议下、面向 Client 端的高并发应用,或者 Peer-to-Peer 场景下大量数据持续传输的应用,本质上是一个适用于服务器通信相关的多种应用场景的 NIO 框架。

简单地说 Netty 封装了 JDK 的 NIO,不用再写一大堆复杂的代码。既然代替了原生的 NIO,肯定有比它好的理由,主要有如下几点:

1.Netty 底层 IO 模型可以随意切换,比如可以从 NIO 切换到 BIO,但一般很少会这么做。

2.Netty 自带拆包解包,从 NIO 各种繁复的细节中脱离出来,让开发者重点关心业务逻辑。

3.Netty 解决了 NIO 中 Selector 空轮询 BUG,这个 BUG 应该很多人听说过,虽然官方声明 jdk1.6 的 update18 修复了该问题,只不过是降低了发生的概率。

4.对 Selector 做了很多细小的优化,reactor 线程模型能做到高效的并发处理。

# 应用场景

分布式系统中,各个节点之间需要远程服务调用,高性能的  RPC  框架必不可少,Netty  作为异步高性能的通信框架,往往作为基础通信组件被这些  RPC  框架使用(Dubbo  的  RPC  框架使用  Dubbo  协议进行节点间通信,其默认使用  Netty  作为基础通信组件)

游戏行业中,Netty  作为高性能的基础通信组件,方便定制和开发私有协议栈,同时提供了  TCP/UDP  和  HTTP  协议栈,地图服务器之间可以方便的通过  Netty  进行高性能的通信

大数据领域中,经典的  Hadoop  的高性能通信和序列化组件  Avro  的  RPC  框架,也是默认采用  Netty  进行跨界点通信

物联网行业中,牵涉到很多应用传感器和服务器端的数据通信,可以使用 Netty 轻松解决

其他开源场景使用 Netty:Netty.docs: Related projects (opens new window)

# 预备知识

本文默认您已经掌握了Java OOP  编程、Java  多线程编程、Java IO  编程、Java  网络编程、常用的  Java  设计模式(比如观察者模式,命令模式,职责链模式)、常用的数据结构(比如链表),因此相关知识不会过多赘述

# I/O 模型

# BIO

Java BIO:同步并阻塞(传统阻塞型),服务器实现模式为一个连接一个线程,即客户端有连接请求时服务器端就需要启动一个线程进行处理,如果这个连接不做任何事情会造成不必要的线程开销

BIO  方式适用于连接数目比较小且固定的架构,这种方式对服务器资源要求比较高,并发局限于应用中,JDK1.4  以前的唯一选择,但程序简单易理解

BIO 是面向流的

# NIO

Java NIO:同步非阻塞,服务器实现模式为一个线程处理多个请求(连接),即客户端发送的连接请求都会注册到多路复用器上,多路复用器轮询到连接有  I/O  请求就进行处理

NIO  方式适用于连接数目多且连接比较短(轻操作)的架构,比如聊天服务器,弹幕系统,服务器间通讯等。编程比较复杂,JDK1.4  开始支持

NIO 是面向缓冲区或者面向块的

注:NIO 本质思想和 HTTP 2.0 使用的多路复用技术相同

# AIO

Java AIO(NIO.2):异步非阻塞,AIO  引入异步通道的概念,采用了  Proactor  模式,简化了程序编写,有效的请求才启动线程,它的特点是先由操作系统完成后才通知服务端程序启动线程去处理

AIO  方式使用于连接数目多且连接比较长(重操作)的架构,比如相册服务器,充分调用  OS  参与并发操作,编程比较复杂,JDK7  开始支持

# 安装

本次使用版本:Netty4.1.x(5.0 出现重大 BUG,已被抛弃)

官方文档:Netty.docs: Netty.docs: Home (opens new window)

# 参考链接

  • Netty 入门看这一篇就够了 - 掘金 (juejin.cn) (opens new window)
  • Netty 入门与实战教程 - LingBrown - 博客园 (cnblogs.com) (opens new window)
  • Netty 学习手册 (dongzl.github.io) (opens new window)
  • 超详细 Netty 入门,看这篇就够了!-阿里云开发者社区 (aliyun.com) (opens new window)
  • 史上最通俗 Netty 入门长文:基本介绍、环境搭建、动手实战-网络编程/专项技术区 (opens new window)
  • Netty 教程 (yiibai.com) (opens new window)
编辑 (opens new window)
上次更新: 2023/11/28, 12:55:10
SPM/SCM 流量跟踪体系
Flyway 数据库版本管理实战指南

← SPM/SCM 流量跟踪体系 Flyway 数据库版本管理实战指南→

最近更新
01
百度网盘加速
03-24
02
新版 PyCharm 设置 Conda 虚拟环境
03-24
03
腾讯云域名转到阿里云
03-24
更多文章>
Theme by Vdoing | Copyright © 2023-2024 ReturnTmp | MIT License
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式