Netty学习:Channel及其内部接口Unsafe

2023-05-16

连接到网络套接字或组件的一种连接,它能够进行I/O操作,如读、写、连接和绑定。

通道为用户提供:

  • 通道的当前状态(例如是否打开?)它是连接吗?)
  • 通道的{@linkplain ChannelConfig配置参数}(如接收缓冲区大小),
  • 通道支持的I/O操作(例如读、写、连接和绑定)
  • {@link ChannelPipeline}处理与通道关联的所有I/O事件和请求。

所有I/O操作都是异步的。

Netty中的所有I/O操作都是异步的。这意味着任何I/O调用都将立即返回,并且不能保证在调用结束时已完成所请求的I/O操作。相反,您将返回一个{@link ChannelFuture}实例,该实例将在请求的I/O操作成功、失败或取消时通知您。

通道是分层的

根据创建的方式,{@link Channel} 可以具有{@linkplain #parent() parent}。例如,一个被{@link ServerSocketChannel}接受的{@link SocketC层次结构的语义取决于{@link Channel}所属的传输实现。例如,您可以编写一个新的{@link Channel}实现来创建共享一个套接字连接的子通道,就像<a href="http://beepcore.org/">BEEP</a>和<a href="http://en.wikipedia.org/wiki/Secure_Shell">SSH</a>所做的那样。hannel}将返回{@link ServerSocketChannel}作为它的父节点通过{@link #parent()}。

向下转换以访问特定于传输的操作

一些传输公开特定于传输的其他操作。将{@link Channel}向下转换为子类型以调用此类操作。例如,对于旧的I/O数据报传输,多播连接/离开操作由{@link DatagramChannel}提供。

释放资源

 调用{@link #close()}或{@link #close(ChannelPromise)}来释放使用{@link通道}后的所有资源是很重要的。这可以确保以适当的方式释放所有资源,即文件句柄。

ChannelId id();返回此{@link Channel}的全局惟一标识符。

EventLoop eventLoop();返回这个{@link Channel}注册到的{@link EventLoop}。

Channel parent();返回该通道的父通道。如果该通道没有父通道,则为{@code null}。

ChannelConfig config();返回该通道的配置。

 boolean isOpen();如果{@link Channel}是打开的,并且稍后可能激活,则返回{@code true}

boolean isRegistered();如果{@link Channel}已注册在{@link EventLoop},则返回{@code true}。

boolean isActive();如果{@link Channel}处于活动状态并已连接,则返回{@code true}。

ChannelMetadata metadata();返回通道的元数据,它描述了{@link Channel}的性质。

 SocketAddress localAddress();返回该通道绑定到的本地地址。返回的{@link SocketAddress}应该向下转换为更具体的类型,例如{@link InetSocketAddress}来检索详细信息。

SocketAddress remoteAddress();返回该通道连接到的远程地址。返回的{@link SocketAddress}应该向下转换为更具体的类型,例如{@link InetSocketAddress}来检索详细信息。返回该通道的远程地址。如果该通道未连接,则为{@code null}。如果这个通道没有连接,但是它可以接收来自任意远程地址的消息(例如,{@link DatagramChannel},使用{@link DatagramPacket# receiver()}来确定接收到的消息的来源,因为这个方法将返回{@code null}。

ChannelFuture closeFuture();返回{@link ChannelFuture},该通道关闭时将通知该{@link ChannelFuture}。这个方法总是返回相同的将来实例。

boolean isWritable();当且仅当I/O线程将立即执行所请求的写操作时,返回{@code true}。当这个方法返回{@code false}时发出的任何写请求都将排队,直到I/O线程准备好处理排队的写请求。

 long bytesBeforeUnwritable();获取在{@link #isWritable()}返回{@code false}之前可以写入多少字节。这个量总是非负的。如果{@link #isWritable()}是{@code false},则为0。

 long bytesBeforeWritable();获取必须从底层缓冲区中提取多少字节,直到{@link #isWritable()}返回{@code true}。这个量总是非负的。如果{@link #isWritable()}为{@code true}则为0。

Unsafe unsafe();返回提供不安全操作的<em>内部使用对象</em>。

ChannelPipeline pipeline();返回指定的{@link ChannelPipeline}。

ByteBufAllocator alloc();返回分配的{@link ByteBufAllocator},它将用于分配{@link ByteBuf}s。

Channel read();

Channel flush();

 

-------------------------------------------------------------------------------------------------------------------------------------------------------------------------

Unsafe

<em>不安全</em>操作,应该<em>永远不应该</em>从用户代码调用。这些方法仅用于实现实际传输,必须从I/O线程调用,以下方法除外:

     * <ul>
     *   <li>{@link #localAddress()}</li>
     *   <li>{@link #remoteAddress()}</li>
     *   <li>{@link #closeForcibly()}</li>
     *   <li>{@link #register(EventLoop, ChannelPromise)}</li>
     *   <li>{@link #deregister(ChannelPromise)}</li>
     *   <li>{@link #voidPromise()}</li>
     * </ul>

RecvByteBufAllocator.Handle recvBufAllocHandle();返回指定的{@link RecvByteBufAllocator.Handle},用于在接收数据时分配{@link ByteBuf}的。

SocketAddress localAddress();返回绑定到本地的{@link SocketAddress},如果没有,返回{@code null}。

SocketAddress remoteAddress();返回远程绑定到的{@link SocketAddress},如果还没有绑定,则返回{@code null}。

void register(EventLoop eventLoop, ChannelPromise promise);注册{@link ChannelPromise}的{@link Channel},注册完成后通知{@link ChannelFuture}。

void bind(SocketAddress localAddress, ChannelPromise promise);将{@link SocketAddress}绑定到{@link ChannelPromise}的{@link Channel},并在完成后通知它。

void connect(SocketAddress remoteAddress, SocketAddress localAddress, ChannelPromise promise);将给定的{@link ChannelFuture}的{@link Channel}与给定的远程{@link SocketAddress}连接起来。如果应该使用特定的本地{@link SocketAddress},则需要将其作为参数给出。否则就将{@code null}传递给它。

 void disconnect(ChannelPromise promise);断开{@link ChannelFuture}的{@link Channel},操作完成后通知{@link ChannelPromise}。

void close(ChannelPromise promise);关闭{@link ChannelPromise}的{@link Channel},操作完成后通知{@link ChannelPromise}。

void closeForcibly();立即关闭{@link Channel},不触发任何事件。可能只有注册失败时才有用。

void deregister(ChannelPromise promise);从{@link EventLoop}注销{@link ChannelPromise}的{@link Channel},操作完成后通知{@link ChannelPromise}。

void beginRead();调度一个读取操作,该操作填充{@link ChannelPipeline}中第一个{@link ChannelInboundHandler}的入站缓冲区。如果已经有一个挂起的读操作,这个方法什么也不做。

void write(Object msg, ChannelPromise promise);高度一个写操作。

void flush();清除所有通过{@link #write(Object, ChannelPromise)}调度的写操作。

ChannelPromise voidPromise();返回一个特殊的ChannelPromise,它可以被重用并传递给{@link Unsafe}中的操作。它永远不会被通知成功或错误,所以它只是一个占位符,用于那些以{@link ChannelPromise}为参数但您不想被通知的操作。

ChannelOutboundBuffer outboundBuffer();返回存储暂挂写请求的{@link Channel}的{@link ChannelOutboundBuffer}。

 

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Netty学习:Channel及其内部接口Unsafe 的相关文章

  • 卸载 Ubuntu 16.04 Kinetic版本ROS

    需要先卸载ros indigo desktop full xff1a sudo apt get remove ros kinetic desktop full 上述命令只是删除ros indigo desktop full而已 xff0c
  • ROS中使用激光雷达HLS-LFCD LDS(Neato XV-11)

    本例激光雷达 HLS LFCD2 参考资料 xff1a https blog csdn net jacka654321 article details 82916688 接线 新款 CP2102模块 USB to TTL USB转串口模块U
  • 树莓派3B+安装Ubuntu Mate 16.04

    1 下载镜像 适用于3B 43 的ubuntu mate 16 04镜像 Ubuntu Mate SD zip xff0c 百度云链接 xff1a https pan baidu com s 1EX nuQReV9IJuQfvkA9XWA
  • 树莓派无人机-资料整理,请做过的大佬,多多指正

    树莓派3B和树莓派3B 43 有了 xff0c 无人机有了 xff0c PX4飞控有了 xff0c 还是一脸懵逼 xff0c 看过老外的树莓派无人机 43 4G图传视频 xff0c 用到拓展版 xff0c 一难买 xff0c 二穷 xff1
  • EasyDL定制化图像识别-图片分类

    EasyDL定制化图像识别 EasyDL是百度推出的定制模型训练平台 xff0c 不需要算法编程 xff0c 通过简单的页面操作 xff0c 和少量数据即可训练定制化的机器学习模型 图像分类 识别一张图中是否是某类物体 状态 场景 可以识别
  • 小程序微商城-商铺管理后台

    主页 xff1a 商城管理 xff1a 微信配置 xff1a 商城设置 xff1a 模板消息 xff1a 运费规则 xff1a 修改条目 xff1a 新增 按重 xff1a 新增 按件 xff1a 包邮规则 xff1a 包邮规则编辑 小程序
  • Spring源码之ConfigurableApplicationContext

    ConfigurableEnvironment xff1a 提供设置活动和默认配置文件以及操作底层属性源的工具 BeanFactoryPostProcessor xff1a 允许自定义修改应用程序上下文的bean定义 xff0c 调整上下文
  • django-web开发框架-使用Ajax

    使用Ajax 使用视图通过上下文向模板中传递数据 xff0c 需要先加载完成模板的静态页面 xff0c 再执行模型代码 xff0c 生成最张的html xff0c 返回给浏览器 xff0c 这个过程将页面与数据集成到了一起 xff0c 扩展
  • stm32在freertos系统下使用串口DMA接收方式对接freemodbus-rtu协议栈

    stm32在freertos系统下使用串口DMA接收方式对接freemodbus rtu协议栈 文章目录 stm32在freertos系统下使用串口DMA接收方式对接freemodbus rtu协议栈前言码农工程师 xff0c 人狠话不多
  • ubuntu子系统 InRelease

    InRelease Err 1 http archive ubuntu com ubuntu bionic InRelease Temporary failure resolving 39 archive ubuntu com 39 Err
  • cmakelist 寻找opencv

    我猜测可能是因为我修改opencv的默认安装路径 xff0c 导致这个问题 xff0c 于是百度CMakeList txt该如何修找opencv4的库 slam十四讲里面 xff0c CMakeList寻找opencv4库的语句 xff1a
  • git clone early EOF解决方法

    在git clone时经常会遇到 early EOF这种错误 fatal The remote end hung up unexpectedly fatal early EOF fatal index pack failed 一般出现这种错
  • opencv检测矩形

    参考 xff1a 使用OpenCV检测图像中的矩形 知来者逆的博客 CSDN博客 opencv检测图像中的矩形 1 得到原始图像之后 xff0c 代码处理的步骤是 xff1a xff08 1 xff09 滤波增强边缘 xff08 2 xff
  • 模型大小 与参数量计算

    1 model size 就是模型的大小 xff0c 我们一般使用参数量parameter来衡量 xff0c 注意 xff0c 它的单位是个 但是由于很多模型参数量太大 xff0c 所以一般取一个更方便的单位 xff1a 兆 M 来衡量 比
  • 多传感器融合track fusion

    这个讲的不错 xff1a 第六篇 无人驾驶的sensor fusion和多目标tracking 知乎 题图来自matlab公开课 sensor fusion and tracking 侵权删 但凡目前自动驾驶公司的一线工程师 xff0c 或
  • windows software develop kit 安装卸载笔记

    windows software develop kit 是visual studio 的开发工具库 安装 xff1a 打开Visual Studio Installer中 xff0c 1 Visual Studio Installer所在
  • px4flow智能光学流动传感器

    PX4Flow 是一款智能光学流动传感器 传感器拥有原生 752 480 像素分辨率 xff0c 计算光学流的过程中采用了4倍分级和剪裁算法 xff0c 计算速度达到250Hz xff08 白天 xff0c 室外 xff09 xff0c 具
  • Spring源码之ConfigurableEnvironment Environment ConfigurablePropertyResolver PropertyResolver

    PropertyResolver xff1a 接口以解析任何底层资源的属性 boolean containsProperty String key 返回给定的属性KEY是否可用于解析 xff0c 如果给定密钥的值不是NULL String
  • pyqt setStyleSheet用法

    设置背景 xff1a self content splitter setStyleSheet 34 QSplitter handle background lightgray 34 设置padding self detailFrame pi
  • [音乐] 随遇而安

    黄霑真的很适合唱这种充满了江湖气息的歌 xff0c 这首歌的经典程度不亚于 沧海一声笑 有兴趣的自己搜来听听吧 人外有人山外有山 不怕拼命怕平凡 有得有失有欠有还 老天不许人太贪 挺起胸膛咬紧牙关 生死容易低头难 就算当不成英雄 也要是一条

随机推荐

  • 视觉SLAM十四讲(一)基础知识

    SLAM是Simultaneous Localization and Mapping的缩写 xff0c 中文 同时定位于地图构建 双目SLAM的距离估计是比较左右眼的图像获得的 xff0c 非常消耗计算资源 xff0c 需要使用GPU和FP
  • E-R概念模型

    E R 概念模型 1 信息的现实世界 我们要管理的客观存在的各种事物 事务之间的相互联系及事物的发生 变化过程 1 实体 Entity 现实世界中存在的可以相互区分的事物或概念称为实体 2 实体的特征 Entity Characterist
  • 数据库设计说明书参考模板

    数据库设计说明书参考模板1 xff0e 引言 1 1 项目名称 1 2项目背景和内容概要 xff08 项目的委托单位 开发单位 主管部门 与其它项目的关系 xff0c 与其他机构的关系等 xff09 1 3相关资料 缩略语 定义 xff08
  • 事件的简单解释:

    事件的简单解释 事件是对象发送的消息 xff0c 以发信号通知操作的发生 操作可能是由用户交互 xff08 例如鼠标单击 xff09 引起的 xff0c 也可能是由某些其他的程序逻辑触发的 引发 xff08 触发 xff09 事件的对象叫做
  • .Net中把图片等文件放入DLL中,并在程序中引用

    摘要 有时我们需要隐藏程序中的一些资源 xff0c 比如游戏 xff0c 过关后才能看到图片 xff0c 那么图片就必须隐藏起来 xff0c 否则不用玩这个游戏就可以看到你的图片了 xff0c 呵呵 本文就讲述了如何把文件 xff08 比如
  • VB中如何保存图片到 Sql Server中,又如何读取出来??

    Const BLOCKSIZE 61 8192 Public Sub SaveToDB ByRef Fld As ADODB Field DiskFile As String Dim byteData As Byte 39 定义数据块数组
  • 在Vf中如何将Excel数据导入(用Vf来导)?

    请大侠们赐教 使用import命令 xff0c 如 xff1a IMPORT FROM 表1 xls TYPE xls 将表1 xls导入为表1 dbf 点击 文件 xff0d gt 导入 xff0d gt 类型选择 xff1a Micro
  • 3.3 生产管理系统需求分析

    根据以上对生产管理内容和生产管理系统的分析 xff0c 一个标准的MRP生产管理系统应该包括如图3 12所示的几大功能 除此之外系统还应包括信息系统必须具备的通用功能 xff0c 例如系统管理 权限设置 数据备份与恢复等 xff0c 这些功
  • Spring源码之事物注解@Transactional原理(源码层面)

    官方文档地址 xff1a https docs spring io spring docs 4 3 21 RELEASE spring framework reference htmlsingle transaction 我翻译的地址 xf
  • 設計公司軟件開發需求分析流程

    工作流程 一 平面设计客户合作流程 信息收集 1 客户提出工作要求 2 客户提供相美文本及图片资料 公司介绍 项目描述 基本设计要求 提案 1 双方就设计内容进行协商 xff0c 修改 补充 xff0c 以达成共识 2双方确定设计具体细节及
  • DBcontext应用于已存在数据库

    EF4 1有三种方式来进行数据操作及持久化 分别是Database First Model First Code first xff0c 前面都已经简单介绍过了 下面简单小结一下 xff1a 1 Database First 是基于已存在的
  • 没有为该对象定义无参数的构造函数(MVC 之DefaultControllerFactory 依赖注入)

    Asp net mvc2中提供很多可以扩展的地方 xff0c 利用这些扩展之后 xff0c asp net mvc使用起来更加灵活 Simone Chiaretta曾写过一篇文章 xff1a 13 ASP NET MVC extensibi
  • Entity Framework 学习总结之一:ADO.NET 实体框架概述

    ADO NET 实体框架概述 新版本中的 ADO NET 以新实体框架为特色 它使开发人员可以通过对象模型 xff08 而不是逻辑 关系数据模型 xff09 专注于数据 实体框架有助于将逻辑数据架构抽象为概念模型 xff0c 并且允许以多种
  • Entity Framework 学习总结之四:对象服务介绍使用

    System Data Objects System Data Entity dll 该命名空间包含一些类 xff0c 用于提供对 对象服务 的核心功能的访问 这些类使您可以藉由作为实体类型实例的强类型 CLR 对象来查询 插入 更新和删除
  • Entity Framework 学习总结之四:对象服务介绍使用

    System Data Objects System Data Entity dll 该命名空间包含一些类 xff0c 用于提供对对象服务的核心功能的访问 这些类使您可以藉由作为实体类型实例的强类型 CLR 对象来查询 插入 更新和删除数据
  • 未执行的URL(MVC异常)

    昨天开始就碰到在IIS里面通过URL无法直接访问到图片 xff0c 提示错误 xff0c 所以经过研究发现 xff0c 合理的配置节应该如下 先改成集成模式 xff0c 然后再改成经典模式 lt system webServer gt lt
  • PIX学习路径-1-选择PIXHAWK作为飞控学习的起点

    xff08 先声明出处 xff1a http blog csdn net qq 21842557 article details 52214425 xff09 创业领域现在最火爆的是什么 xff1f 无疑是机器人和无人机 越来越多的巨头和V
  • PIX学习路径-3-PIXHAWK二次开发之前需要知道的事

    现在作为一个consumer xff0c 能够实现将飞机装配 xff0c 使用MP进行固件烧录 xff0c 初始化校准 xff0c 然后还能够调节PID xff0c 这样算是一个合格的consumer了 xff0c 现在希望对PIXHAWK
  • Java面试题全集(上)

    2013年年底的时候 xff0c 我看到了网上流传的一个叫做 Java面试题大全 的东西 xff0c 认真的阅读了以后发现里面的很多题目是重复且没有价值的题目 xff0c 还有不少的参考答案也是错误的 xff0c 于是我花了半个月时间对这个
  • Netty学习:Channel及其内部接口Unsafe

    连接到网络套接字或组件的一种连接 xff0c 它能够进行I O操作 xff0c 如读 写 连接和绑定 通道为用户提供 通道的当前状态 例如是否打开 它是连接吗 通道的 64 linkplain ChannelConfig配置参数 如接收缓冲