Netty入门学习笔记(二)

【Netty入门教程】Netty基础篇之入门详情介绍 本文主要讲述Netty框架的一些特性以及重要组件,希望看完之后能对Netty框架有一个比较直观的感受,希望能帮助读者快速入门Netty,减少一些弯路。 Netty是 一个异步事件驱动的网络应用程序框架,用于**快速开发可维护的高性能协议服务器和客户端。 Netty是一个NIO客户端-服务器框架,可以快速轻松地开发协议服务器和客户端等网络应用程序。它大大简化和简化了TCP和UDP套接字服务器等网络编程。 阅读详情

阶段二:客户端实现

在这个阶段,我们将学习如何使用Netty实现客户端,理解客户端与服务端的区别。

项目 1-07:实现基础Netty客户端

📌 项目目标

学习如何使用Netty实现客户端,理解客户端与服务端的区别。实现最简单的Netty客户端,只有连接功能。

🔑 核心知识点
  1. Bootstrap:客户端启动辅助类(服务端使用ServerBootstrap)

  2. 客户端只需要一个EventLoopGroup:

    • 服务端需要两个:Boss和Worker
    • 客户端只需要一个:Worker
  3. connect():客户端连接服务端(服务端使用bind())

  4. 客户端与服务端的区别:

    • 启动类:Bootstrap vs ServerBootstrap
    • 线程组:1个 vs 2个
    • Channel类型:NioSocketChannel vs NioServerSocketChannel
    • 操作:connect() vs bind()
💻 核心代码解析

NettyClient.java - 客户端启动类

private void connect(String host, int port) {
    // 1. 创建一个线程组(客户端只需要一个)
    EventLoopGroup workerGroup = new NioEventLoopGroup();
    
    try {
        // 2. 创建客户端启动器
        Bootstrap b = new Bootstrap();
        b.group(workerGroup)
                .channel(NioSocketChannel.class)  // 使用NioSocketChannel
                .option(ChannelOption.AUTO_READ, true)// 自动读取数据
                .handler(new MyChannelInitializer());
        
        // 3. 连接服务端
        ChannelFuture f = b.connect(host, port).sync();
        System.out.println("客户端连接成功");
        
        // 4. 等待客户端Channel关闭
        f.channel().closeFuture().sync();
        
    } catch (InterruptedException e) {
        e.printStackTrace();
    } finally {
        // 5. 优雅关闭线程组
        workerGroup.shutdownGracefully();
    }
}

MyChannelInitializer.java - Channel初始化器

public class MyChannelInitializer extends ChannelInitializer<SocketChannel> {
    @Override
    protected void initChannel(SocketChannel channel) {
        // 此时Pipeline中没有添加任何Handler
        // 所以客户端只能连接,不能收发数据
    }
}
🎯 运行效果
  • 客户端能够成功连接服务端
  • 但不能发送和接收数据
📊 客户端与服务端对比
特性服务端客户端
启动类ServerBootstrapBootstrap
线程组数量2个(Boss+Worker)1个(Worker)
Channel类型NioServerSocketChannelNioSocketChannel
启动方法bind(port)connect(host, port)
作用监听端口,接收连接主动连接服务端

项目 1-08:实现完整的收发功能

📌 项目目标

实现完整的Netty客户端,实现连接+收发数据功能。

🔑 核心知识点
  1. 客户端编解码器配置:与服务端相同

  2. 客户端发送数据:

    • 在channelActive()中发送(连接建立后)
    • 在channelRead()中发送(收到消息后)
  3. 完整的客户端功能:连接、发送、接收

💻 核心代码解析

MyChannelInitializer.java - 添加编解码器

@Override
protected void initChannel(SocketChannel channel) {
    // 解码器(入站)
    channel.pipeline().addLast(new LineBasedFrameDecoder(1024));
    channel.pipeline().addLast(new StringDecoder(Charset.forName("GBK")));
    
    // 编码器(出站)
    channel.pipeline().addLast(new StringEncoder(Charset.forName("GBK")));
    
    // 业务处理器
    channel.pipeline().addLast(new MyClientHandler());
}

MyClientHandler.java - 客户端业务处理器

public class MyClientHandler extends ChannelInboundHandlerAdapter {
    
    @Override
    public void channelActive(ChannelHandlerContext ctx) throws Exception {
        // 连接建立后,主动发送消息
        SocketChannel channel = (SocketChannel) ctx.channel();
        System.out.println("连接服务端:" + channel.localAddress().getHostString());
        
        // 发送消息
        ctx.writeAndFlush("你好,我是客户端\r\n");
    }
    
    @Override
    public void channelRead(ChannelHandlerContext ctx, Object msg) throws Exception {
        // 接收服务端消息
        String message = (String) msg;
        System.out.println("收到服务端消息:" + message);
        
        // 可以继续发送消息
        ctx.writeAndFlush("收到你的消息了\r\n");
    }
}
🎯 运行效果
  • 客户端连接服务端后,主动发送消息
  • 客户端能够接收服务端的响应
  • 实现了完整的双向通信
📊 与项目1-07的对比
功能项目1-07项目1-08
连接服务端✅✅
发送数据❌✅
接收数据❌✅
编解码器无有
💡 客户端开发要点
  • 客户端通常在channelActive()中主动发送消息
  • 客户端和服务端使用相同的编解码器
  • 客户端可以实现自动重连机制

netty学习笔记-01 netty学习笔记 阅读详情

相关推荐

超详细Netty入门,看这篇就够了!

超详细Netty入门,看这篇就够了!

yehongzhi1994的博客 1748

Netty3学习笔记(二) --- Netty Helloworld入门

netty可以运用在那些领域? 1 分布式进程通信 例如: hadoop、dubbo、akka等具有分布式功能的框架,底层RPC通信都是基于netty实现的,这些框架使用的版本通常都还在用netty3.x 2、游戏服务器开发 最新的游戏服务器有部分公司可能已经开始采用netty4.x 或 netty5.x 3、netty服务端hello world案例 SimpleChannelHandler 处...

小道的博客 314

保姆级教程:用北醒TFmini-i-CAN雷达给PixHawk飞控加装‘眼睛’,实现自动避障与定高

经过多次测试,前向雷达的最佳安装位置是机架前部下方5-10cm处,倾斜角度20-30度。电源方面,建议为CAN设备单独供电,避免电机启动时的电压骤降导致数据异常。北醒TFmini-i-CAN雷达与PixHawk飞控的组合,为DIY爱好者打开了低成本实现智能避障的大门。实际部署时,需确保整个CAN网络的波特率一致(TFmini-i默认为250kbps),每个设备具有唯一ID。雷达的安装角度也直接影响检测效果,建议通过3D打印支架将雷达向前下方倾斜15-30度。当使用多个雷达时,需为每个设备创建独立的参数组。

weixin_30892889的博客 338

netty权威指南学习笔记二——netty入门应用

  经过了前面的NIO基础知识准备,我们已经对NIO有了较大了解,现在就进入netty的实际应用中来看看吧。重点体会整个过程。 按照权威指南写程序的过程中,发现一些问题:当我们在定义handler继承ChannelHanderAdapter时候,发现在其接口中没有可以实现的channelRead方法和channelReadComplete方法,然后查阅官网才发现netty5.0不见了,...

zuixiaoyao_001的博客 271

智能车图像处理9-进阶篇1--中线的提取

(1)10-50行 基础扫线 (2)56-71 断行0 ,就是比如遇到十字,十字路口下方 第一次断线的地方。 (3)83-124 按照原先有效行,拟线作为中值,然后从中值向左右扫线,同时计算赛道宽度。 (4)125-138 如果出现赛道宽度小于先前有效行,则找到二次扫线的起点,从二次扫线起点处,继续向下扫线,直至结束,同时记录最后的有效行。 (5) 310-- 最后计算左右边线类似于方差的值,用于环岛的判断 ***这里着重描述一下二次扫线,希望大家可以理解的深刻

taiyuezyh的博客 1万+

投稿前利用GPT-5.5给论文做一次深度校对,投稿命中率翻倍!

3)一致性:请对比摘要的结论与正文(如果我也提供了正文),确保完全一致。请严格检查结果部分,确保客观性:1)纯粹性检查:标出所有包含“为什么”(解释)或“这意味着什么”(暗示)的主观语句,这些应移至讨论部分。请你帮我评估讨论部分的深度:1)解释与对比:检查每一项主要结果是否都解释了原因,并引用了前人研究进行对比(一致或相悖)。我见过太多人把校对理解为检查错别字了,实际上,校对要看的远不止这个,像逻辑是否连贯、术语是否前后一致、图表有没有被正确引用等等的这些细节,往往决定了文章是秒被拒,还是能顺利进入外审。

智能AI让学术科研更容易 412

Netty入门学习笔记(二)--初尝IO

学前准备 IO 模型介绍 BIO(同步阻塞IO) BIO 介绍 BIO 是 JDK 1.4 前使用的网络 IO 模型,但由于其每个客户端连接都为一个其分配一个线程的特性,并且每个连接并非都是在传输数据,造成服务器资源大量的消耗。 改进点:在此基础上新增一个线程池,可以保证一定程度上减少资源消耗,但依旧无法解决无效连接问题。 BIO 模型 BIO使用场景 BIO 由于其阻塞的特性,实际生产中使用场景较少。 适合极少人用,但是每次使用都传输大量数据的场景。 NIO(同步非阻塞IO) NIO 介绍 NIO

LuckyToMeet-Dian叶 517

GB 47955—2026 L2组合驾驶辅助强制国标全解、合规方案与工程代码落地

GB 47955—2026 L2辅助驾驶国标合规工程代码# 运行环境:Python3.8+,适配车载仿真、台架测试、算法验证场景# 依赖安装:pip install numpy dataclasses tqdm struct time json# ===================== 国标强制时序参数(完全对标GB 47955—2026) =====================HAND_OFF_FIRST_WARN = 5.0 # 手部脱离5s触发一级预警。

lin_xiu的博客 312

Netty入门(快速了解以及使用netty)

Netty 是一个异步的、基于事件驱动的网络应用框架,用于快速开发可维护、高性能的网络服务器和客户端。Netty 在 Java 网络应用框架中的地位就好比:Spring 框架在 JavaEE 开发中的地位 以下的框架都使用了 Netty,因为它们有网络通信需求! Cassandra - nosql 数据库 Spark - 大数据分布式计算框架 Hadoop - 大数据分布式存储框架 RocketMQ - ali 开源的消息队列 ElasticSearch - 搜索引擎 gRPC

lonelykkk的博客 8629

【以太网硬件一】802.3xx标准怎么这么多?它们有什么关系?

IEEE 802.3标准发展历史简介

highman110的博客 5018

RK35X8调试YT8531单网口千兆以太网PHY芯片,修复ping不通或者IP地址丢失的问题

RK35X8上调试YT8531以太网PHY

荻夜的博客 3977

Netty学习笔记-Netty入门

EventLoopGroup 翻译:事件循环组,channel一般会调用EventLoopGroup的register的方法来绑定其中一个EventLoop,后续这个channel的io事件都由这个EventLoop 来处理(保证了io事件处理时的线程安全)负责根据一定的策略选择下一个可用的EventExecutor,通常是一个NioEventLoop。底层实现是两个不同的。的执行器,里面有run方法处理channel上源源不断的io事件。next()方法的实现逻辑主要是通过对内部维护的。

Ninomi_的博客 1310

国科大《人工智能原理与算法》2021年期末试题+2024经验(2025指南)

2021年期末试题+24年复习指南

MatsumotoChrikk 2929

Netty入门 -- 什么是Netty?

通俗易懂,一文让你搞懂Netty~

wanghuichen的博客 2331

基于AUTOSAR的汽车电子项目--电动助力转向系统

基于AUTOSAR的汽车电子项目开发通常涵盖广泛的领域,例如动力系统控制、车身电子、信息娱乐系统、高级驾驶辅助系统(ADAS)等。以下是一个简化的示例项目,展示了如何在AUTOSAR环境下开发一个电动助力转向系统(Electric Power Steering, EPS)的控制软件

MHD0815的博客 2131

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

Netty入门

同时也会执行一些。

m0_74229735的博客 1553

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

Netty学习——Netty入门

二. Netty 入门 1. 概述 1.1 Netty 是什么? Netty is an asynchronous event-driven network application framework for rapid development of maintainable high performance protocol servers & clients. Netty 是一个异步的、基于事件驱动的网络应用框架,用于快速开发可维护、高性能的网络服务器和客户端。 这里的异步是指Netty采用了

maruofan666的博客 1985

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

超详细Netty入门

官方的介绍:Netty是 一个异步事件驱动的网络应用程序框架,用于快速开发可维护的高性能协议服务器和客户端。

2301_76406247的博客 3851

Netty从入门到进阶(二)

Netty是一个异步事件驱动的网络应用框架,用于快速开发高性能、可维护的网络服务器和客户端。本文介绍了Netty的核心组件和基础用法。

ltt159264的博客 1128

Netty 学习笔记

黑马程序员Netty全套教程 Channel 是读写数据的双向通道,Buffer是内存缓冲区,暂存数据。常见的 Channel 和 Buffer 见讲义。 ByteBuffer(包括MappedByteBuffer、DirectByteBuffer、HeapByteBuffer)最常用。多线程设计:多个客户端对应多个socket,就会启动多个线程。每个线程对应一个socket连接 缺点:内存占用高、线程上下文切换成本高、只适合连接数少的场景 线程池版设计,缺点:阻塞模式下,线程仅能处理一个 socket

cutlery1137的博客 784

Netty学习笔记(二)netty

文章目录Reactor 模型传统IO模型单 Reactor 单线程单 Reactor 多线程主从 Reactor 多线程Netty线程模型Echo实例Bootstrap单线程模型配置属性channelHandlerChannelHandlerContext入站出站顺序ChannelHandlerContext总结ChannelFuture多Handler例子异步模型Future 说明Future方法netty编码解码decoderEcoderTCP粘包什么是TCP粘包问题?如何处理粘包现象?UDP会不会产生

qq_46107726的博客 3010

二. Netty 入门

二. Netty 入门 二. Netty 入门 视频笔记:https://www.bilibili.com/video/BV1py4y1E7oA?p=53&spm_id_from=pageDriver 1. 概述 1.1 Netty 是什么? Netty is an asynchronous event-driven network application framework for rapid development of maintainable high performance protoco

weixin_46633487的博客 688

初识netty-netty快速入门

WebSocket 是一种在客户端和服务器之间建立持久连接的协议,允许双向、全双工的通信,避免了传统 HTTP 请求响应模式的高开销。WebSocket 协议通过握手建立连接,在连接建立后,可以持续发送和接收数据,适合实时应用,如聊天、在线游戏、股票行情等。@Overridelogger.info("心跳超时");@Slf4j@Component/*** 用于处理每个传入的消息。

lonelykkk的博客 4566
上一篇: Netty入门学习笔记(一)
下一篇: Netty入门学习笔记(三)
不早睡不改名@
博客等级 码龄5年 536粉丝 306原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值