当前位置: 首页 > java >正文

Netty使用教程

一、Netty 服务端架构

1、组件交互执行流程

  • 服务端启动初始化时有 Boss EventLoopGroup 和 Worker EventLoopGroup 两个组件,其中 Boss 负责监听网络连接事件。当有新的网络连接事件到达时,则将 Channel 注册到 Worker EventLoopGroup。
  • Worker EventLoopGroup 会被分配一个 EventLoop 负责处理该 Channel 的读写事件。每个 EventLoop 都是单线程的,通过 Selector 进行事件循环。
  • 当客户端发起 I/O 读写事件时,服务端 EventLoop 会进行数据的读取,然后通过 Pipeline 触发各种监听器进行数据的加工处理。
  • 客户端数据会被传递到 ChannelPipeline 的第一个 ChannelInboundHandler 中,数据处理完成后,将加工完成的数据传递给下一个 ChannelInboundHandler。
  • 当数据写回客户端时,会将处理结果在 ChannelPipeline 的 ChannelOutboundHandler 中传播,最后到达客户端。

2、组件名词解释

  • ServerBootstrap 

    • 作用:Netty 中用于启动服务器的核心类。它负责配置服务端的启动参数,并将事件分发到不同的线程组中
    • 功能:
      • 配置服务端的监听地址和端口
      • 配置 EventLoopGroup(包括 Boss EventLoopGroupWorker EventLoopGroup
      • 配置 ChannelPipeline,即数据处理的逻辑管道
      • 启动服务端并开始监听客户端连接
  • EventLoopGroup 

    • Boss EventLoopGroup

      • 作用:负责处理新连接的建立(Accept 操作)。当客户端请求连接时,Boss EventLoopGroup 会将其分配给 Worker EventLoopGroup 进行后续处理。
    • Worker EventLoopGroup 

      • 作用:负责处理已建立连接的 I/O 操作(读取、写入等)。每个连接会被分配到一个 EventLoop,由其负责处理该连接的所有 I/O 事件。
  • EventLoop

    • 作用:EventLoopEventLoopGroup 的核心单元,负责处理单个线程中的事件循环。
    • 功能:
      • 监听注册到其上的 Channel 的 I/O 事件
      • 执行与这些事件相关的操作(如读取数据、写入数据等)
      • 管理 ChannelPipeline 中的 ChannelHandler 的执行顺序 
  • Channel

    • ​​​​​​​功能:Channel 是 Netty 中表示网络连接的抽象类,可以是 TCP 连接(SocketChannel)、UDP 连接(DatagramChannel)或其他类型的连接 
  • ChannelPipeline

    • ​​​​​​​​​​​​​​功能:ChannelPipeline 是 Netty 中用于处理 I/O 事件的逻辑管道。它是 Channel 的核心组成部分,负责按照特定顺序调用注册在其上的 ChannelHandler 
  • ChannelHandler

    • ​​​​​​​​​​​​​​功能:ChannelHandler 是 Netty 中用于处理 I/O 事件的具体逻辑类
    • 分类:
      • ChannelInboundHandler : 处理入站事件(如读取数据、连接建立等)
      • ChannelOutboundHandler : 处理出站事件(如写入数据、关闭连接等)
http://www.xdnf.cn/news/744.html

相关文章:

  • 闭包函数的应用与理解
  • 探索 Model Context Protocol (MCP):它如何影响 AI 的表现?
  • 【android bluetooth 框架分析 02】【Module详解 12】【 BidiQueue、BidiQueueEnd、Queue介绍】
  • QT常见输入类控件及其属性
  • 5 matplotlib样式和颜色设置
  • 脑影像分析软件推荐| GraphVar介绍
  • Java学习笔记(数组,方法)
  • 英语学习4.20
  • 算法题(129):二维前缀和
  • C 语言的未来:在变革中坚守与前行
  • 字符输入验证函数
  • PI0 Openpi 部署(仅测试虚拟环境)
  • 百望山游记,佘太君庙,杨家将的故事
  • 【HDFS入门】HDFS故障排查与案例分析:从日志分析到实战解决
  • Linux 进程控制(自用)
  • centos停服 迁移centos7.3系统到新搭建的openEuler
  • 2025年人工智能指数报告:技术突破与社会变革的全景透视
  • 2022 CCF CSP-S2.策略游戏
  • Transformer系列(一):NLP中放弃使用循环神经网络架构
  • xss4之cookie操作
  • SpringBoot Actuator指标收集:Micrometer与Prometheus集成
  • 【网络篇】从零写UDP客户端/服务器:回显程序源码解析
  • 基于kubernetes1.23.17容器化部署RuoYi全栈项目手册
  • AI与思维模型【69】——人类误判心理
  • 计算机视觉与深度学习 | TensorFlow基本概念与应用场景:MNIST 手写数字识别(附代码)
  • 洛谷题目:P7775 [COCI 2009/2010 #2] VUK 题解 (本题简)
  • 雨滴传感器详解(STM32)
  • spring事务
  • C++ 模块化编程(Modules)在大规模系统中的实践难点
  • Spring Boot 集成 Kafka 及实战技巧总结