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()

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

JSP页面组件

JSP页面组件 JSP页面由各种组件组成,可以在JSP应用程序中使用这些组件来添加其他功能,如添加添加和循环结构或使用JavaBean组件。JSP页面的四个组件为: JSP指令JSP脚本JSP隐式对象JSP动作1. JSP指令 JSP页面中的指令元素提供关于特定JSP页面的全局信息,有三种类型: Page…

《图像处理》 图像细化

前言 图像细化算法又称之为Thinning Algorithms,或者骨架提取(skeleton)。该算法通常用于手写体数字的细化,输入的图像要求是黑白图像,即二值图像。从白色区域提取出该区域的中心线,中心线对于白色区域相当…

基于轻量级模型YOLOX-Nano的菜品识别系统

工程Gitee地址: https://gitee.com/zhong-liangtang/ncnn-android-yolox-nano 一、YOLOX简介 YOLOX是一个在2021年被旷视科技公司提出的高性能且无锚框(Anchor-free)的检测器,在YOLO系列的基础上吸收近年来目标检测学术界的最新…

STM32--SPI通信协议(3)SPI通信外设

前言 硬件SPI:通过硬件电路实现,所以硬件SPI速度更快,有专门的寄存器和 库函数 ,使用起来更方便。 软件SPI:也称模拟SPI,通过程序控制IO口电平模拟SPI时序实现,需要程序不断控制IO电平翻转&am…

Python 数据分析(PYDA)第三版(二)

原文:wesmckinney.com/book/ 译者:飞龙 协议:CC BY-NC-SA 4.0 四、NumPy 基础知识:数组和向量化计算 原文:wesmckinney.com/book/numpy-basics 译者:飞龙 协议:CC BY-NC-SA 4.0 此开放访问网络版…

Maven私服部署与JAR文件本地安装

Nexus3 是一个仓库管理器,它极大地简化了本地内部仓库的维护和外部仓库的访问。 平常我们在获取 maven 仓库资源的时候,都是从 maven 的官方(或者国内的镜像)获取。团队的多人员同样的依赖都要从远程获取一遍,从网络方…

Cilium CNI深度指南

Cilium是基于eBPF的功能强大的CNI插件,为云原生环境提供了强大的网络和安全支持。原文: Cilium CNI: A Comprehensive Deep Dive Guide for Networking and Security Enthusiasts! 🌓简介 欢迎阅读为网络和安全爱好者提供的全面深入的指南! 本…

PCIe学习笔记(1)Hot-Plug机制

文章目录 Hot-Plug InitHot Add FlowSurprise Remove FlowNPEM Flow Hot-Plug Init PCIe hot-plug是一种支持在不关机情况下从支持的插槽添加或删除设备的功能,PCIe架构定义了一些寄存器以支持原生热插拔。相关寄存器主要分布在Device Capabilities, Slot Capabili…

进程间通信(5):信号灯集

信号灯也叫信号量,是不同进程间或一个给定进程内部不同线程间同步的机制。 信号灯集为信号量的集合,实现同步、互斥机制,配合共享内存使用,解决资源竞争问题。 函数:semget、semctl、semop 实现流程: 1…

《Git 简易速速上手小册》第5章:高级 Git 技巧(2024 最新版)

文章目录 5.1 交互式暂存5.1.1 基础知识讲解5.1.2 重点案例:为 Python 项目分阶段提交5.1.3 拓展案例 1:细粒度控制更改5.1.4 拓展案例 2:处理遗漏的更改 5.2 使用 Rebase 优化提交历史5.2.1 基础知识讲解5.2.2 重点案例:整理 Pyt…

【Java】eclipse连接MySQL数据库使用笔记(自用)

注意事项 相关教程:java连接MySQL数据库_哔哩哔哩_bilibilijava连接MySQL数据库, 视频播放量 104662、弹幕量 115、点赞数 1259、投硬币枚数 515、收藏人数 2012、转发人数 886, 视频作者 景苒酱, 作者简介 有时任由其飞翔,有时禁锢其翅膀。粉丝群1&…

Vue中v-if和v-show区别

Vue中v-if和v-show是两个常用的指令,用于控制元素的显示和隐藏。虽然它们都能达到相同的效果,但在实现机制和使用场景上有一些区别。本文将详细介绍v-if和v-show的区别,并且通过示例代码来演示它们的使用。 首先,让我们来看一下v…

深度学习图像分类相关概念简析+个人举例2(CNN相关原理概念与计算)

(2)卷积神经网络:英文全称Convolutional Neural Network,简称 CNN 是一种常用于图像分类的深度学习模型,其主要特点是包含了卷积层和池化层,能够提取图像的局部特征。输入层、卷积层、池化层、全连接层和输出层都是卷积…

不必为发“压岁钱”或“红包”烦恼

中国人的民俗——过年要发“压岁钱”,也称发“ 红包 ”,时间确定在除夕夜12点正。因为按照传统观念,除夕夜是阴阳交替重要时刻;发“压岁钱”,也代表着辟邪驱鬼、保佑平安。“岁”字的谐音“祟”,即灾祸&…

Win10系统启动盘制作

前面简单介绍了操作系统,但是怎样将操作系统安装到磁盘上呢。 一、操作系统引导 电脑启动大致流程: 预引导阶段:计算机通电后,系统自检,检查硬件是否正常。 引导阶段:BIOS或EFI在完成基本的硬件检测和平台初…

【GAMES101】Lecture 19 相机

目录 相机 视场 Field of View (FOV) 曝光(Exposure) 感光度(ISO) 光圈 快门 相机 成像可以通过我们之前学过的光栅化成像和光线追踪成像来渲染合成,也可以用相机拍摄成像 今天就来学习一下相机是如何成像的…

【模板初阶】

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 前言 1. 泛型编程 2. 函数模板 2.1 函数模板概念 2.2 函数模板格式 2.3 函数模板的原理 2.4 函数模板的实例化 2.5 模板参数的匹配原则 3. 类模板 3.1 类模板的定义…

夜天之书 #95 GreptimeDB 社群观察报告

GreptimeDB 是格睿科技(Greptime)公司研发的一款开源时序数据库,其源代码[1]在 GitHub 平台公开发布。 https://github.com/GreptimeTeam/greptimedb 我从 2022 年开始知道有 GreptimeDB 这个项目。2023 年,我注意到他们的 Commun…

Spring Boot + 七牛OSS: 简化云存储集成

引言 Spring Boot 是一个非常流行的、快速搭建应用的框架,它无需大量的配置即可运行起来,而七牛云OSS提供了稳定高效的云端对象存储服务。利用两者的优势,可以为应用提供强大的文件存储功能。 为什么选择七牛云OSS? 七牛云OSS提供了高速的…

【vscode】windows11在vscode终端控制台中打印console.log()出现中文乱码问题解决

1. 问题描述 在前端开发过程中使用vscode编写node.js,需要在控制台中打印一些中文信息,但是一直出现中文乱码问题,英文和数字都显示正常。在网上试了很多设置的办法,最终找到windos11设置中解决。 2. 原因 首先打开控制台&…