Netty学习笔记

0.NIO三大组件(channel、selector、buffer)

1.channel:

相当于socket,和socket相比是非阻塞式的

2.selector:

和一个线程组成一个整体,对channel进行轮询,对事件进行监听和派发

3.buffer:

数据缓存区,在内存中通过减少系统调用次数来提高传输速度

1.骨架

EventLoopGroup bossGroup = new NioEventLoopGroup();
EventLoopGroup workerGroup = new NioEventLoopGroup();ServerBootstrap serverBootstrap = new ServerBootstrap();serverBootstrap.group(bossGroup,workerGroup).channel(NioServerSocketChannel.class).childHandler(new ChannelInitializer<SocketChannel>(){@Overrideprotected void initChannel(SocketChannel socketChannel) throws Exception {// 添加处理器socketChannel.pipeline().addLast(new ChannelHandler());...}});
ChannelFuture f = serverBootstrap.bind(2333).sync();// 绑定端口,返回future
f.channel().closeFuture().sync();// 监听关闭事件,若有关闭指令便阻塞式关闭服务器
// sync:阻塞式等待,执行到该指令时候线程会阻塞,直到执行完毕才执行下一行代码

 1.ServerBootstrap

服务器启动类,用于包装组件。包括:EventLoopGroup、ServerChannel、ChannelHandler

2.EventLoopGroup

事件处理线程组(通常为一个线程) 

3. ServerChannel

处理网络通信的方法,通常使用NioServerSocketChannel(非阻塞)

4. ChannelHandler
用于每个客户端连接通道定义不同的处理方式

2. ChannelHandler

channelhandler常见实现类:

SimpleChannelInboundHandler<>:

SimpleChannelInboundHandler是一个泛型类,在定义时需要指定它所处理的消息类型。例如,SimpleChannelInboundHandler<ByteBuf>表示这个处理器专门处理ByteBuf类型的入站消息

ChannelInboundHandlerAdapter、ChannelOutboundHandlerAdapter:

channelRead方法中接收的是Object类型的消息,这意味着它可以处理任何类型的入站(出站)消息

ChannelInitializer:

用于为serverBootstrap添加一系列的channelhandler处理逻辑

channelhandler常见事件触发函数:

channelRegistered、channelUnregistered:

当使用ServerBootstrap启动一个服务器时,新接受的客户端连接对应的Channel会被注册到EventLoop。当一个客户端连接关闭时,对应的Channel会从EventLoop中注销,从而触发channelUnregistered事件。

channelActive、channelInactive:

在一个TCP客户端连接到服务器后,如果连接成功建立,客户端的Channel就会触发channelActive事件。如果一个服务器端与客户端的连接因为网络故障或者客户端主动断开而关闭,服务器端对应的Channel就会触发channelInactive事件。

channelRead、channelRead0:

在处理一个HTTP请求时,当整个请求体都被读取完毕后,对应的Channel会触发channelReadComplete事件。

exceptionCaught:

如果在解析接收到的数据时发生格式错误,或者在发送数据时出现I/O错误,对应的Channel就会触发exceptionCaught事件。

userEventTriggered:

如果在一个自定义的定时任务中,当定时时间到达时,可以通过fireUserEventTriggered方法触发一个用户自定义事件,从而在ChannelHandler中触发userEventTriggered事件。

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

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

相关文章

利用FnOS搭建虚拟云桌面,并搭建前端开发环境(一)

利用FnOS搭建虚拟云桌面&#xff0c;并搭建前端开发环境 一 飞牛FnOS官方文档一、安装FnOS【Win11系统】1.下载VirtualBox2.下载FnOS镜像3.创建虚拟机4.启动完成后&#xff0c;会进入这样一个界面&#xff0c;这个基本上后续就后台了 本人在网上冲浪了很久&#xff0c;一直也没…

MySQL之复合查询与内外连接

目录 一、多表查询 二、自连接 三、子查询 四、合并查询 五、表的内连接和外连接 1、内连接 2、外连接 前面我们讲解的mysql表的查询都是对一张表进行查询&#xff0c;即数据的查询都是在某一时刻对一个表进行操作的。而在实际开发中&#xff0c;我们往往还需要对多个表…

json格式的post请求目前不行, 要换成form表单形式的post请求怎么改

问: 下面是我的代码 export function fetchDeleteList<T>(agentSessionId: string) {return post<T>({url: http://192.168.0.116:8089/pipe-ics/agent/delete,method: post,data: { agentSessionId },}) } 目前是json格式的post请求, 目前不行, 要换成form表单…

Pandas处理时间序列之光谱分析与聚类

import matplotlib.pylab as plt %matplotlib inline import numpy as np from numpy import fft import pandas as pd 一、光谱分析 • 将时间序列分解为许多正弦或余弦函数的总和 • 这些函数的系数应该具有不相关的值 • 对正弦函数进行回归 光谱分析应用场景 基于光谱的…

Android OpenGLES2.0开发(四):矩阵变换和相机投影

事物的本质是事物本身所固有的、深藏于‌现象背后并决定或支配现象的方面‌。 还记得我们上一篇绘制的三角形吗&#xff0c;我们确实能够顺利用OpenGL ES绘制出图形了&#xff0c;这是一个好的开始&#xff0c;但这还远远不够。我们定义的坐标是正三角形&#xff0c;但是绘制出…

YoloV10改进策略:BackBone改进|CAFormer在YoloV10中的创新应用,显著提升目标检测性能

摘要 在目标检测领域,模型性能的提升一直是研究者和开发者们关注的重点。近期,我们尝试将CAFormer模块引入YoloV10模型中,以替换其原有的主干网络,这一创新性的改进带来了显著的性能提升。 CAFormer,作为MetaFormer框架下的一个变体,结合了深度可分离卷积和普通自注意力…

学习博客写作

欢迎使用Markdown编辑器 你好&#xff01; 这是你第一次使用 Markdown编辑器 所展示的欢迎页。如果你想学习如何使用Markdown编辑器, 可以仔细阅读这篇文章&#xff0c;了解一下Markdown的基本语法知识。 新的改变 我们对Markdown编辑器进行了一些功能拓展与语法支持&#x…

Vue】Vue扫盲(四)组件化思想与简单应用

【Vue】Vue扫盲&#xff08;一&#xff09;事件标签、事件修饰符&#xff1a;click.prevent click.stop click.stop.prevent、按键修饰符、及常用指令 【Vue】Vue扫盲&#xff08;二&#xff09;指令&#xff1a;v-for 、v-if、v-else-if、v-else、v-show 【Vue】Vue扫盲&…

解决银河麒麟桌面操作系统V10(ARM)中`apt-get update`“正在等待报头”问题

解决银河麒麟桌面操作系统V10&#xff08;ARM&#xff09;中apt-get update“正在等待报头”问题 1、问题描述2、 解决方法步骤一&#xff1a;打开终端步骤二&#xff1a;清理APT缓存步骤三&#xff1a;再次尝试更新软件源 &#x1f496;The Begin&#x1f496;点点关注&#x…

spring面试之2024

1、什么是spring? Spring是一个Java开发框架&#xff0c;它提供了一种可扩展的模型来开发Java应用程序。Spring框架的目标是提供一个全面的解决方案&#xff0c;用于构建企业级应用程序。Spring框架的核心特点包括依赖注入&#xff08;DI&#xff09;、面向切面编程&#xff…

django的路由分发

前言&#xff1a; 在前面我们已经学习了基础的Django了&#xff0c;今天我们将继续学习&#xff0c;我们今天学习的是路由分发&#xff1a; 路由分发是Web框架中的一个核心概念&#xff0c;它指的是将不同的URL请求映射到对应的处理函数&#xff08;视图&#xff09;的过程。…

如何提高专利申请的成功率?

在当今充满创新与竞争的时代&#xff0c;专利成为了保护智力成果、赢得市场优势的重要武器。然而&#xff0c;专利申请并非一帆风顺&#xff0c;许多申请人在这一过程中面临诸多挑战&#xff0c;导致申请成功率不尽如人意。那么&#xff0c;如何才能在这复杂的专利申请之路上提…

宝塔 进程守护管理器 神坑,再次跌入。thinkphp-queue队列 勤勤学长

如果&#xff0c;你有在使用【进程守护管理器】&#xff0c;记得在更新/重启&#xff0c;甚至卸载重新安装后&#xff0c;重启服务器。 事情的起因是&#xff0c;昨日服务器突然异常&#xff0c;网站无法正常访问&#xff0c;进入宝塔面板&#xff0c;发现 cpu和负载率均超过1…

2024.10月11日--- SpringMVC拦截器

拦截器 1 回顾过滤器&#xff1a; Servlet规范中的三大接口&#xff1a;Servlet接口&#xff0c;Filter接口、Listener接口。 过滤器接口&#xff0c;是Servlet2.3版本以来&#xff0c;定义的一种小型的&#xff0c;可插拔的Web组件&#xff0c;可以用来拦截和处理Servlet容…

1000题-计算机网络系统概述

术语定义与其他术语的关系SDU&#xff08;服务数据单元&#xff09;相邻层间交换的数据单元&#xff0c;是服务原语的表现形式。在OSI模型中&#xff0c;SDU是某一层待传送和处理的数据单元&#xff0c;即该层接口数据的总和。 - SDU是某一层的数据集&#xff0c;准备传递给下一…

ICDE 2024最新论文分享|BEEP:容量约束下能够对抗异常干扰的航运动态定价系统

论文简介 本推文详细介绍了上海交通大学高晓沨教授和陈贵海教授团队发表在顶级学术会议ICDE 2024上发表的最新论文《Corruption Robust Dynamic Pricing in Liner Shipping under Capacity Constraint》&#xff0c;该论文的学生作者为胡永祎、李雪嫣、魏熙锴&#xff0c;合作…

Midjourney零基础学习

Midjourney学习笔记TOP04 Midjourney的各种参数设置 Midjourney的用户操作界面没有醒目的工具栏、属性栏&#xff0c;所有的操作都是通过调用各种指令和参数进行的。 【MJ Version】 Midjourney在2023年3月份就已经更新到了V5版本&#xff0c;V5版本除了画质有所提升外&#…

MacOS 同时配置github、gitee和gitlab密钥

MacOS 同时配置github、gitee和gitlab密钥 1 在终端中新建 ~/.ssh目录 1.1 生成GitHub、Gitee和Gitlab的SSH密钥对 ssh-keygen -t ed25519 -C "xxxxxxxxxxx.com" -f ~/.ssh/id_ed25519_gitee ssh-keygen -t ed25519 -C "xxxxxxxxxxx.com" -f ~/.ssh/id_…

TikTok代理IP全面使用指南

对于那些希望通过社交媒体打造个人品牌的人来说&#xff0c;TikTok是现在热门的平台&#xff0c;他的流量与曝光不可小觑&#xff0c;相信很多跨境营销会选择他进行多账号营销。问题是&#xff0c;TikTok多账号很容易遇到封禁问题&#xff0c;那么如何解决&#xff1f; 一、什么…

无人机集群路径规划:5种优化算法(SFOA、APO、GOOSE、CO、PIO)求解无人机集群路径规划,提供MATLAB代码

一、单个无人机路径规划模型介绍 无人机三维路径规划是指在三维空间中为无人机规划一条合理的飞行路径&#xff0c;使其能够安全、高效地完成任务。路径规划是无人机自主飞行的关键技术之一&#xff0c;它可以通过算法和模型来确定无人机的航迹&#xff0c;以避开障碍物、优化…