Netty核心组件介绍
Netty是一款用于创建高性能网络应用程序的高级框架。Netty的核心组件如下:
- Channel
- 回调
- Future
- 事件和ChannelHander
Channel
channel是Java NIO的一个基本构造。可以把Channel看作是传入或传出数据的载体。它可以被打开或关闭,连接或断开连接。
回调
Netty在内部使用了回调来处理事件:当一个回调被触发时,相关的事件可以被一个ChannelHandler的实现处理。
如:
public class ContentHandler extends ChannelInboundHandlerAdapter {public void channelActive(ChannelHandlerContext ctx) throws Exception {System.out.println("client " + ctx.channel().remoteAddress() + " connected");}
}
Future
Future提供了另一种在操作完成时通知应用程序的方式。这个对象可以看作是一个异步操作的结果的占位符,它将在未来的某个时刻完成,并提供对其结果的访问。
JDK预置了java.util.concurrent.Future,但是其所提供的实现只允许手动检查对应的操作是否已经完成,或者一直阻塞直到它完成。Netty提供了它自己的实现——ChannelFuture,用于在执行异步操作的时候用。每个Netty的io操作都将返回一个ChannelFuture,也就是说它们都不会阻塞。Netty是完全异步和事件驱动的。
使用方法如下:
Channel channel = ... ;ChannelFuture future = channel.connect(new InetSocketAddress("192.168.0.1", 25));future.addListener(new ChannelFutureListener() {public void operationComplete(ChannelFuture future) {if(future.isSuccess()) {ByteBuf buffer = Unpooled.copiedBuffef("Hello", Charset.defaultCharset());ChannelFuture wf = future.channel().writeAndFlush(buffer);} else {future.cause().printStackTrace(); }}});
事件和ChannelHandler
Netty使用不同的事件来通知我们状态的改变或操作的状态。这使得我们能够根据已经发生的事件来触发适当的动作。Netty是一个网络编程框架,所以事件是按照它们与入站或出站数据流的相关性进行分类的。可能由入站数据或者相关的状态更改而触发的事件包括:
-
连接已被激活或连接失活
-
数据读取
-
用户事件
-
错误事件
出站事件是未来将会触发的某个动作的操作结果,这些动作包括: -
打开或关闭到远程节点的连接
-
将数据写到或冲刷到套接字
每个事件都可以被分发给ChannelHandler类中的某个用户实现的方法。下图展示了一个事件是如何被一个这样的ChannelHandler链处理的。

你可以认为每个ChannelHandler的实例都类似于一种为了响应特定事件而被执行的回调。
合在一起
Future、回调和ChannelHandler
Netty的异步编程模型是建立在Future和回调的概念之上的,而将事件派发到ChannelHandler的方法则发生在更深的层次上。结合在一起,这些元素就提供了一个处理环境,使你的应用程序逻辑可以独立于任何网络操作相关的顾虑而独立地演变。这也是Netty的设计方式的一个关键目标。
拦截操作以及高速地转换入站数据和出站数据,都只需要你提供回调或利用操作返回的Future。这使得链接操作变得既简单又高效,并且促进了可重用的通用代码的编写。
选择器、事件和EventLoop
Netty通过触发事件将Selector从应用程序中抽象出来,消除了所有将需要手动编写的派发代码。在内部,为每个Channel分配一个EventLoop,用以处理所有事件,包括:
- 注册感兴趣的事件
- 将事件派发给ChannelHandler
- 安排进一步的动作
EventLoop本身只由一个线程驱动,其处理了一个Channel的io事件,并且在该EventLoop的整个生命周期内都不会改变。这个简单而强大的设计消除了你所有可能有的在ChannelHandler实现中需要进行同步的任何顾虑,因此你可以专注于提供正确的逻辑,用来在有感兴趣的数据要处理的时候执行。
相关文章:
Netty核心组件介绍
Netty是一款用于创建高性能网络应用程序的高级框架。Netty的核心组件如下: Channel回调Future事件和ChannelHander Channel channel是Java NIO的一个基本构造。可以把Channel看作是传入或传出数据的载体。它可以被打开或关闭,连接或断开连接。 回调 …...
代码审计平台sonarqube的安装及使用
docker搭建代码审计平台sonarqube 一、代码审计关注的质量指标二、静态分析技术分类三、使用sonarqube的目的四、sonarqube流程五、docker快速搭建sonarqube六、sonarqube scanner的安装和使用七、sonarqube对maven项目进行分析八、sonarqube分析报告解析九、代码扫描规则定制十…...
C++ 使用nlohmann/json.hpp库读写json字符串
1. json库 我个人比较喜欢 nlohmann/json.hpp 这个库,因为它只需要一个hpp文件即可,足够轻量! 这是它的github地址。 2. 简单实例代码 #include <iostream> #include <json.hpp> #include <fstream> #include <stri…...
3GPP官网下载协议步骤
1.打开官网 https://www.3gpp.org/ 2.点击 3.在界面选择要找的series,跳转到查找界面 以V2X通信协议为例,论文中通常会看到许多应用: [7] “Study on evaluation methodology of new Vehicle-to-Everything (V2X) use cases for LTE and NR…...
【JAVA】Git 的基本概念和使用方式
Git是一个开源的分布式版本控制系统,由Linus Torvalds创建,用于有效、高速地处理从小到大的项目版本管理。以下是Git的一些基本概念和使用方式的深入探讨: 基本概念 1. 仓库(Repository) 仓库是Git用来保存你的项目…...
C++多态实现原理详解
阅读引言: 我想象了一下, 假如人有突然问我什么是多态, 我该如何给别人说清楚呢?所以写下这篇文章, 希望大家看完有所收获。 ①. 开胃小菜 先看这样一个开胃小菜 这里我有点小小的疑惑, 大小为啥是1。 在C…...
[数据集][目标检测]交通灯检测数据集VOC+YOLO格式2600张1类别
数据集格式:Pascal VOC格式YOLO格式(不包含分割路径的txt文件,仅仅包含jpg图片以及对应的VOC格式xml文件和yolo格式txt文件) 图片数量(jpg文件个数):2600 标注数量(xml文件个数):2600 标注数量(txt文件个数):2600 标注…...
关于测试用例
目录 一 测试用例介绍 二 写用例的好处 三 不适合写用例的情况 一 测试用例介绍 测试用例由测试来写,编写时间在需求评审和设计评审(如有)结束后,需求提测前,用例依赖需求文档来编写。一般包含用例标题,…...
一起长锈:3 类型安全的Rust宏(从Java与C++转Rust之旅)
讲动人的故事,写懂人的代码 故事梗概:在她所维护的老旧Java系统即将被淘汰的危机边缘,这位在编程中总想快速完事的女程序员,希望能转岗到公司内部使用Rust语言的新项目组,因此开始自学Rust;然而,在掌握了Rust编程知识之后,为了通过Rust项目组的技术面试,使得转岗成功而…...
《金融研究》:普惠金融改革试验区DID工具变量数据(2012-2023年)
数据简介:本数据集包括普惠金融改革试验区和普惠金融服务乡村振兴改革试验区两类。 其中,河南兰考、浙江宁波、福建龙岩和宁德、江西赣州和吉安、陕西铜川五省七地为普惠金融改革试验区。山东临沂、浙江丽水、四川成都三地设立的是普惠金融服务乡村振兴…...
Prompt|Kimi高阶技巧,99%的人都不知道
大家好,我是无界生长。 今天分享一条咒语,轻松让Kimi帮你生成流程图,学会了的话,点赞收藏起来吧! 效果展示 我们演示一下让kimi帮忙绘制 关注微信公众号“无界生长”的流程图,最终效果图如下所示 效果还不…...
采购管理软件:采购自动化提高效率的5种方式
在采购领域,手动数据输入和耗时的文书工作的时代已经落后了。采购自动化正在改变游戏规则,使企业能够简化流程、降低成本并提高效率。 以下是采购自动化帮助企业提高效率的5种方法。 采购管理软件,采购自动化管理,8Manage SRM,高亚科技 减少手动流程和…...
Android App开机启动
清单文件 <?xml version"1.0" encoding"utf-8"?> <manifest xmlns:android"http://schemas.android.com/apk/res/android"xmlns:tools"http://schemas.android.com/tools"><uses-permission android:name"andro…...
服务器直连电脑(盒子直连电脑)电脑需要设置为固定ip才能访问盒子
文章目录 现象盒子设置为固定ip,pc设置成固定ip(以太网网卡,realtak那个,不是tap-windows那个,tap-windows不用管),在pc上用ip搜索工具搜索,可以搜到盒子ip。盒子设置为固定ip&#…...
【设计模式】之代理模式(两种)
系列文章目录 (其他设计模式可以参考 👉👉👉)设计模式_小杰不秃头的博客 😊😄😛 前言 今天继续给大家介绍23种设计模式中的代理模式,熟悉Spring的小伙伴都知道…...
【工具篇】-什么是.NET
“.NET":.NET Core是由Microsoft开发,目前在.NET Foundation(一个非营利的开源组织)下进行管理。.NET Core是用C#和C编写的,并采用MIT协议作为开源协议。 简单来说:就是开发框架。 .NET 又称 .NET 平台或 .NET 框架…...
OmniReader Pro mac激活版:智慧阅读新选择,开启高效学习之旅
在追求知识的道路上,一款优秀的阅读工具是不可或缺的。OmniReader Pro作为智慧阅读的新选择,以其独特的功能和卓越的性能,为您开启高效学习之旅。 OmniReader Pro具备高效的文本识别和处理技术,能够快速准确地提取文档中的关键信息…...
Stable Diffusion学习记录
文章目录 前言电脑配置推荐环境搭建下载地址安装步骤步骤一,打开下载的秋叶整合包,路径秋叶整合包/sd-wenui-aki步骤二,打开下载好的sd-webui-aki-v4.8.7解压包 Stable Diffusion软件配置,插件安装,模型下载Stable Dif…...
安装openssh-server,提供远程ssh
安装openssh-server,提供远程ssh 1.检查自己是否安装了openssh-server dpkg -l | grep ssh如果输出内容有openssh-server,说明已经安装过了,可以跳过下一步 2.安装openssh-server 由于ubuntu自带ssh客户端,只需要安装openssh-se…...
华纳云:选择数据库服务器你需要注意的5个原则
选择数据库服务器时,有几个关键原则需要注意,以确保选择的服务器能够满足你的需求并提供可靠的性能和安全性。 1. 性能需求 考虑你的应用程序对性能的需求,包括处理能力、内存、存储和网络带宽等方面。根据应用程序的负载和预期的并发访问量&…...
手把手教你用云GPU(极链AI云)零成本复现SlowFast视频动作识别,附完整配置文件与避坑指南
零成本云端复现SlowFast视频动作识别全攻略:极链AI云实战与参数精解 在计算机视觉领域,视频理解一直是个充满挑战的方向。不同于静态图像,视频数据包含丰富的时序信息,这对模型架构设计提出了更高要求。SlowFast作为Facebook AI R…...
如何快速破解Cursor Pro限制:一键激活AI编程助手的完整指南
如何快速破解Cursor Pro限制:一键激活AI编程助手的完整指南 【免费下载链接】cursor-free-vip [Support 0.45](Multi Language 多语言)自动注册 Cursor Ai ,自动重置机器ID , 免费升级使用Pro 功能: Youve reached you…...
TEdit地图编辑器:从新手到专家的泰拉瑞亚世界创作指南
TEdit地图编辑器:从新手到专家的泰拉瑞亚世界创作指南 【免费下载链接】Terraria-Map-Editor TEdit - Terraria Map Editor - TEdit is a stand alone, open source map editor for Terraria. It lets you edit maps just like (almost) paint! It also lets you ch…...
2026论文降AI实战SOP:保留排版格式,8款工具与结构级优化指南
内容ai率检测数值太高,不得不熬夜改了一遍又一遍,润色到想吐,结果检测报告上数字还是不尽人意,截止日期越逼越近,真的是没办法了。 我花了整整三天,把2026全网热门的几十款降AI工具通通测了个遍࿰…...
Windows APK安装工具终极指南:轻松在电脑上安装Android应用
Windows APK安装工具终极指南:轻松在电脑上安装Android应用 【免费下载链接】APK-Installer An Android Application Installer for Windows 项目地址: https://gitcode.com/GitHub_Trending/ap/APK-Installer 您是否曾经希望在Windows电脑上直接安装Android…...
伺服电机控制模式全解析:位置、速度、扭矩模式到底怎么选?手把手配置教程
伺服电机控制模式深度实战指南:从原理到参数调优 在工业自动化领域,伺服系统的精准控制直接决定了设备性能的上限。面对位置控制(PT)、速度控制(S)、扭矩控制(T)以及混合模式这四种核心控制策略,许多工程师常陷入选择困境——不同模式对应着截…...
免费公式识别神器:img2latex-mathpix本地部署完全指南
免费公式识别神器:img2latex-mathpix本地部署完全指南 【免费下载链接】img2latex-mathpix Mathpix has changed their billing policy and no longer has free monthly API requests. This repo is now archived and will not receive any updates for the foresee…...
从内核恐慌到系统恢复:一次NMI watchdog触发的soft lockup深度诊断
1. 当服务器突然卡死:从NMI watchdog错误说起 那天下午3点,机房警报突然响起。我冲到服务器前,屏幕上赫然显示着刺眼的红色错误:"NMI watchdog: BUG: soft lockup - CPU#2 stuck for 23s!"。这台承载着核心业务的服务器…...
规划求解(Solver)实战:利用Excel的Solver工具进行投资组合优化
投资界有句老话:"别把鸡蛋放在一个篮子里。"但很少有人告诉你后半句:“每个篮子放多少鸡蛋,才是大学问。“Solver就是投资组合的"营养师”,帮你配出最佳"营养比例”。就像投资界的红绿灯,约束条件告诉你什么可以做,什么不可以碰。 一、什么是规划求解…...
智能任务调度引擎:重构碧蓝航线自动化管理架构
智能任务调度引擎:重构碧蓝航线自动化管理架构 【免费下载链接】AzurLaneAutoScript Azur Lane bot (CN/EN/JP/TW) 碧蓝航线脚本 | 无缝委托科研,全自动大世界 项目地址: https://gitcode.com/gh_mirrors/az/AzurLaneAutoScript 在移动游戏生命周…...
