Netty的常用组件及线程模型设计(二)

Channel、EventLoopGroup和ChannelFuture

Netty网络抽象的代表:

Channel–Socket
EventLoop–控制流、多线程处理、并发
ChannelFuture–异步通知
Channel和EventLoop关系如图:
我们可以看出Channel需要被注册到某个EventLoop上,在Channel整个声明周期内部都由这个EventLoop处理IO事件,也就是说一个Channel和一个EventLoop进行了绑定,但是一个EventLoop可以同时被多个Channel绑定。

在这里插入图片描述

Channel接口。

基本的IO操作(bind()、connect()、read()和write())依赖于底层网络传输所提供的原语。在基于Java的网络编程中,其基本的构造是类Socket.Netty的Channel接口所提供的API,被用于所有的IO操作。大大地降低了直接使用Socket类地复杂性。此外,Channel也是许多预定义、专门化实现地广泛类层次结构的根

由于Channel是独一无二的,所以为了保证顺序将Channel声明为java.lang.Comparable的一个子接口。因此,如果两个不同的Channel示例都返回了相同的散列码,那么AbstractChannel中的compareTo()方法的实现将会抛出一个Error

Channel的生命周期状态

ChannelUnregistered:Channel已经被创建,但是还未注册到EventLoop
ChannelRegistered:Channel已经被注册到了EventLoop
ChannelActiveLChannel处于活动状态(已经连接到它的远程节点)。它现在可以接收和发送数据了,ChannelInactive:Channel没有连接到远程节点
当这些状态发生改变时,将会生成对应的事件。这些事件将会被转发给ChannelPipeline中的,ChannelHandler,其可以随后对它们做出响应。在日常编程中,关注ChannelActive和ChannelInactive会更多一些

重要的Channel的方法。

eventLoop:返回分配给Channel的EventLoop
pipeline:返回Channel的ChannelPipeline,也就是说每个Channel都有自己的ChannelPipeline.
isActive:如果Channel是活动的,则返回true。活动的意义可能依赖于底层的传输。
例如,一个Socket传输一旦连接到了远程节点便是活动的,而一个Datagram传输一旦被打开便是活动的。
localAddress:返回本地的SocketAdress
remoteAddress:返回远程的SocketAddress
write:将数据写到远程节点,注意,这个写只是写往Netty内部的缓存,还没有真正写往Socket
flush:将之前写的数据冲刷到底层Socket进行传输
writeAndFlush:一个简便的方法,等同于调用write()并接着调用flush()

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/460624.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

mmpose单机多卡训练问题

当使用单卡训练时运行命令:python tools/train.py ${CONFIG_FILE} [ARGS]是可以跑通的,但是使用官方提供的:bash ./tools/dist_train.sh ${CONFIG_FILE} ${GPU_NUM} [PY_ARGS]进行单机多卡训练时却报如下错误: .... torch.cuda.O…

C语言--------指针(1)

0.指针&指针变量 32位平台,指针变量是4个字节(32bit/84)--------x86 64位平台,指针变量是8个字节(64bit/88)--------x64 编号指针地址;我们平常讲的p是指针就是说p是一个指针变量; ************只要…

仰暮计划|“第一次看到电视上播放的电影,那种震撼和喜悦仍然留在我的记忆中”

首 我是陈香妹,家在浙江省温州市瑞安市湖岭镇。 在上个世纪,我亲身经历过许多动荡和改变。那是一个充满希望和艰辛的时代,我曾见证了许多社会的变革和人们的奋斗。 01. 上世纪50年代,我还是一个十多岁的小姑娘,正处…

《MySQL 简易速速上手小册》第4章:数据安全性管理(2024 最新版)

文章目录 4.1 用户认证和权限控制4.1.1 基础知识4.1.2 重点案例4.1.3 拓展案例 4.2 防止 SQL 注入和其他安全威胁4.2.1 基础知识4.2.2 重点案例4.2.3 拓展案例 4.3 数据加密和安全备份4.3.1 基础知识4.3.2 重点案例4.3.3 拓展案例 4.1 用户认证和权限控制 进入数据库的安全世界…

MySQL学习记录——유 表的约束

文章目录 1、了解2、空属性3、默认值default4、列描述comment就是注释,desc看不到,show能看到。5、zerofill6、主键7、自增长auto_increment8、唯一键9、外键 1、了解 只有数据类型的约束肯定不够,mysql还有表的约束来进而保证数据合法性。约…

OJ刷题:求俩个数组的交集(没学哈希表?快排双指针轻松搞定!)

目录 ​编辑 1.题目描述 2.C语言中的内置排序函数(qsort) 3.解题思路 3.1 升序 3.2双指针的移动 3.3 保证加入元素的唯一性 4.leetcode上的完整代码 完结散花 悟已往之不谏,知来者犹可追 …

(十七)springboot实战——spring securtity的授权流程源码解析

前言 本节内容是关于spring security安全框架授权流程的源码分析,spring security的授权流程主要是在FilterSecurityInterceptor过滤器中实现的。我们会通过源码层级的分析,了解清楚spring security的底层是如何实现用户授权的。 正文 1.配置一个请求…

【数据结构】一篇文章带你学会八大排序

一、排序的概念1. 排序的使用:2. 稳定性:3. 内部排序:4. 外部排序︰5. 排序的用途: 二、排序的原理及实现1. 插入排序1.1 直接插入排序1.1.1 直接插入排序在现实中的应用1.1.2 直接插入排序的思想及个人理解1.1.3 直接插入排序的排…

c入门第十篇——指针入门

一句话来说: 指针就是存储了内存地址值的变量。 在前面讨论传值和传址的时候,我们就已经开始使用了指针来传递地址。 在正式介绍指针之前,我们先来简单了解一下内存。内存可以简单的理解为一排连续的房子的街道,每个房子都有自己的地址&#…

【Flink状态管理(二)各状态初始化入口】状态初始化流程详解与源码剖析

文章目录 1. 状态初始化总流程梳理2.创建StreamOperatorStateContext3. StateInitializationContext的接口设计。4. 状态初始化举例:UDF状态初始化 在TaskManager中启动Task线程后,会调用StreamTask.invoke()方法触发当前Task中算子的执行,在…

SSH口令问题

SSH(Secure Shell)是目前较可靠、专为远程登录会话和其他网络服务提供 安全性的协议,主要用于给远程登录会话数据进行加密,保证数据传输的安全。 SSH口令长度太短或者复杂度不够,如仅包含数字或仅包含字母等时&#xf…

【Python4Delphi】学习笔记(一):介绍篇

一、前言: 1. python语言简介: 众所周知,python是目前非常流行的编程语言之一,自20世纪90年代初Python语言诞生至今,它已被逐渐广泛应用于系统管理任务的处理和Web编程。 由于Python语言的简洁性、易读性以及可扩展性…