远方的灯塔 - 专注于服务端技术分享 远方的灯塔 - 专注于服务端技术分享
首页
  • Java SE
  • Struts2
  • Hibernate
  • MyBatis
  • JAX-WS
  • 并发
  • 分布式
  • Git
  • 文章分类
  • 文章标签
  • 文章归档
  • 《C程序设计语言》
心情随笔
友情链接
给我留言 (opens new window)
关于我
GitHub (opens new window)

Terwer Green

一个后端老菜鸟
首页
  • Java SE
  • Struts2
  • Hibernate
  • MyBatis
  • JAX-WS
  • 并发
  • 分布式
  • Git
  • 文章分类
  • 文章标签
  • 文章归档
  • 《C程序设计语言》
心情随笔
友情链接
给我留言 (opens new window)
关于我
GitHub (opens new window)
  • JavaSE

  • 开源框架

  • Linux

  • Struts2

  • Hibernate

  • Webservice

  • 分布式

    • RPC架构设计及IO模型
    • NIO编程及其三大核心原理
    • NIO三大核心之缓冲区(Buffer)
    • NIO三大核心之通道(Channel)
    • NIO三大核心之选择器(Selector)
    • Netty核心原理
      • netty核心原理
        • netty介绍
        • 原生NIO存在的问题
        • 概述
    • 线程模型以及传统IO阻塞模型
    • Reactor模型
    • Netty线程模型
    • Netty核心API介绍
    • Netty入门与异步模型
    • Netty高级进阶之Netty编解码器
    • Netty高级进阶之基于Netty的群聊天室案例
    • Netty高级进阶之基于Netty的HTTP服务器开发
    • Netty高级进阶之基于Netty的Websocket开发网页聊天室
    • Netty高级进阶之Netty中的粘包和拆包的解决方案
    • Nety源码剖析
    • 自定义RPC框架之分布式架构网络通信理论
    • 自定义RPC框架之基于Netty实现RPC框架
    • 分布式架构理论
    • 分布式理论之数据一致性
    • 分布式理论之CAP定理
    • 分布式理论之BASE定理
    • 分布式一致性协议之两阶段提交协议(2PC)
    • 分布式一致性协议之三阶段提交协议(3PC)
    • 分布式一致性协议之NWR协议
    • 分布式一致性协议之Gossip协议
    • 分布式一致性协议之Paxos协议
    • 分布式一致性协议之Raft协议
    • 分布式一致性协议之Lease机制
    • 分布式系统设计策略之心跳检测
    • 分布式系统设计策略之高可用
    • 分布式系统设计策略之容错性
    • 分布式系统设计策略之负载均衡
    • 分布式架构服务调用
    • 分布式服务治理之服务协调
    • 分布式服务治理之服务削峰
    • 分布式服务治理之服务降级
    • 分布式服务治理之服务限流
    • 分布式服务治理之服务熔断
    • 分布式服务治理之服务链路追踪
    • 架构设计基本原则之开闭原则(OCP)
    • 架构设计基本原则之单一职责原则(SRP)
    • 架构设计基本原则之接口隔离原则(ISP)
    • 架构设计基本原则之里式替换原则(LSP)
    • 架构设计基本原则之依赖倒置原则(DIP)
    • 架构设计基本原则知识扩展
    • 分布式架构知识拓展与总结
  • 分布式框架

  • 后端开发
  • 分布式
terwer
2022-04-18
目录

Netty核心原理

Netty提供异步的、基于事件驱动的网络应用程序框架,用于快速开发高性能、高可靠性的网络IO程序。

# netty核心原理

# netty介绍

官网:https://netty.io/ (opens new window)

# 原生NIO存在的问题

  1. NIO类库和API繁杂,使用麻烦。需要熟练掌握Selector、ServerSocketChannel、SocketChannel、ByteBuffer等。

  2. 需要具备其他额外技能:要熟悉Java多线程编程,因为NIO涉及到Reactor模式,必须对多线程和网络编程非常熟悉,才能编写出高质量的NIO程序。

  3. 开发工作量和难度非常大:例如客户端面临短线重连、网络闪断、半包读写、失败缓存、网络拥塞和异常流处理等。

  4. JDK NIO的bug:臭名昭著的Epoll BUG,它会导致Selector空轮询,最终导致CPU100%。直到JDK1.7版本,该问题依然存在,没有被根本解决。

    在NIO中通过Selector轮询当前是否有IO事件。

    根据JDK NIO api的描述,Selector的select()方法会一致阻塞,直到IO事件到达或者超时。但是在Linux平台上有时候会出现问题,在某些场景下select方法会直接返回,这就是臭名昭著的Epoll Bug。

    这是一比较严重的Bug,它会导致线程陷入死循环,让CPU达到100%,极大的影响系统的可靠性,到目前为止,JDK还没有完全解决这个问题。

参考:NIO的epoll空轮询bug (opens new window)

# 概述

Netty是由JBOSS提供的一款开源框架。

Netty提供异步的、基于事件驱动的网络应用程序框架,用于快速开发高性能、高可靠性的网络IO程序。

Netty是一个基于NIO的网络编程框架,使用NIO可以快速、简单的开发出一个网络应用,极大的简化了NIO的开发过程。

作为当前最流行的NIO框架,Netty在互联网领域、大数据分布式计算领域、游戏行业、通信行业,获得了广泛应用,知名的Elasticsearch、Dubbo等内部都采用了Netty框架。

image-20220419113521663

Netty的强大之处:零拷贝、可扩展事件模型,支持TCP、UDP、HTTP、WebSocket等协议,提供安全传输、压缩、大文件传输、编解码等。

Netty有以下优点:

  1. 设计优雅,提供阻塞和非阻塞Socket,提供灵活可扩展的事件模型,提供高度可定制的线程模型。
  2. 具备更高的性能和更大的吞吐量,使用零拷贝技术最小化不必要的内存复制,减少资源的消耗。
  3. 提供安全传输特性。
  4. 支持多种主流协议,预置多种编解码功能,支持用户开发私有协议。
编辑 (opens new window)
#netty#nio#socket
上次更新: 2023/02/22, 13:47:25
NIO三大核心之选择器(Selector)
线程模型以及传统IO阻塞模型

← NIO三大核心之选择器(Selector) 线程模型以及传统IO阻塞模型→

最近更新
01
解决css部分border被圆角切掉之后圆角的边框消失问题
03-18
02
使用TypeScript开发一个自定义的Node-js前端开发脚手架
03-08
03
Github-Actions使用release-please实现自动发版
03-06
更多文章>
Theme by Vdoing | Copyright © 2011-2023 Terwer Green | MIT License | 粤ICP备2022020721号-1 | 百度统计
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式