netty实战读书笔记

本文是关于Netty的读书笔记,介绍了Netty的基础概念,如Channel、回调、Future、事件和ChannelHandler。深入讲解了Netty的组件设计,包括EventLoop、ChannelPipeline和编码解码器的作用。同时,提到了SimpleChannelInboundHandler在处理入站数据中的应用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Netty概述

  • Netty是什么?

Netty是一个基于NIO的客户、服务器端编程框架

 

  • Netty优缺点?

 

 

Netty的核心组件

  • Channel

Channel是 Java NIO的一个基本构造,是传输网络数据的通道,

可以把 Channel 看作是传入(入站)或者传出(出站)数据的载体,它可以被打开或者被关闭,连接或者断开连接

 

  • 回调

一个回调其实就是一个方法,一个指向已经被提供给另外一个方法的方法的引用。这使得后

者可以在适当的时候调用前者

  • Future

Future 提供了另一种在操作完成时通知应用程序的方式。这个对象可以看作是一个异步操

作的结果的占位符;它将在未来的某个时刻完成,并提供对其结果的访问

  • 事件和 ChannelHandler

出站、入站操作会触发一系列事件,每个事件都可以被分发给 ChannelHandler 类中的某个实现的方法

 

附: 可以认为ChannelHanlder的实例都类似于一种为了响应特定事件而被执行的回调

 

Netty 的组件和设计

  • Channel接口

Channel接口封装了socket,大大降低了直接使用socket类的复杂性,用以实现基本的I/O操作(bind、connect、read、write)

  • EventLoop接口

可以看做是一个线程,用以处理连接的生命周期中所发生的事件

  1. 一个 EventLoopGroup 包含一个或者多个 EventLoop
  2. 一个 EventLoop 在它的生命周期内只和一个 Thread 绑定
  3. 所有由 EventLoop 处理的 I/O 事件都将在它专有的 Thread 上被处理
  4. 一个 Channel 在它的生命周期内只注册于一个 EventLoop
  5. 一个 EventLoop 可能会被分配给一个或多个 Channel

注意,在这种设计中,一个给定 Channel 的 I/O 操作都是由相同的 Thread 执行的,实际上消除了对于同步的需要

 

  • ChannelFuture接口

Netty中所有的I/O操作都是异步的,一个操作可能不会立即返回,我们需要一种在之后的某个时间点确定其结果的方法.为此,Netty 提供了ChannelFuture 接口,其 addListener()方法注册了一个 ChannelFutureListener,以便在某个操作完成时(无论是否成功)得到通知

 

  • ChannelHandler接口

充当了所有处理入站和出站数据的应用程序逻辑的容器

 

  • ChannelPipeline

ChannelHanlder的容器

 

  • 编码器和解码器

网络数据总是一系列字节

 

  • 抽象类 SimpleChannelInboundHandler

最常见的情况是,你的应用程序会利用一个 ChannelHandler 来接收解码消息,并对该数据应用业务逻辑。要创建一个这样的 ChannelHandler,你只需要扩展基类 SimpleChannelInboundHandler<T>其中 T 是你要处理的消息的 Java 类型。在这个 ChannelHandler 中,

你将需要重写基类的一个或者多个方法,并且获取一个到 ChannelHandlerContext 的引用,

这个引用将作为输入参数传递给 ChannelHandler 的所有方法

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值