Netty中的内置通信模式、Bootstrap和ChannelInitializer

内置通信传输模式

  • NIO:io.netty.channel.socket.nio 使用java.nio.channels包作为基础–基于选择器的方式
  • Epoll:io.netty.channel.epoll由JNI驱动的epoll()和非阻塞IO.这个传输支持只有在Linux上可用的多种特性,如果SO_REUSEPORT,比NIO传输更快,而且是完全非阻塞的。将NioEventLoopGroup替换为
    EpollEventLoopGroup,并且将NioServerSocketChannel.class替换为EpoolServerSocketChannel.class即可
  • OIO:io.netty.channel.socket.oio使用java.net包作为基础–使用阻塞流
  • Local:io.netty.channel.local可以在VM内部通过管道进行通信的本地传输
  • Embedded:io.netty.channel.embedded Embedded传输,允许使用ChannelHandler而又
    不需要一个真正的基于网络的传输,在测试ChannelHandler实现时非常有用

引导 Bootstrap

Bootstrap是Netty框架的启动类和主入口类,分为客户端类Bootstrap和服务器类ServerBootstrap两种。
网络编程里,"服务器"和"客户端"实际上表示了不同的网络行为:换句话说,是监听传入的连接还是建立到一个或者多个进程的连接。
因此,有两种类型的引导:一种用于客户端(简单地称为Bootstrap),而另一种(ServerBootstrap)用于服务器。无论应用程序使用哪种协议或者处理哪种类型地数据,唯一决定它使用哪种引导类的是它是作为一个客户端还是作为一个服务器
在这里插入图片描述
ServerBootstrap和Bootstrap
ServerBootstrap将绑定到一个端口,因为服务器必须要监听连接,而Bootstrap则是由
想要连接到远程节点的客户端应用程序所使用的.第二个区别可能更加明显。引导一个客户端只需要一个EventLoopGroup,但是一个ServerBootstrap则需要两个(也可以是同一个实例),因为服务器需要两组不同的Channel,第一组将只包含一个ServerChannel,代表服务器自身的已绑定到某个本地端口的正在监听的套接字。而第二组将包含所有已创建的用来传入客户端连接(对于每个服务器已经接受的连接都有一个)的Channel.与ServerChannel相关联的EventLoopGroup将分配一个负责为传入连接请求创建Channel的EventLoop。一旦连接被接受,第二个EventLoopGroup就会给它的Channel分配一个EventLoop
在这里插入图片描述

ChannelInitializer

负责初始化Channel.Netty提供了一个特殊的ChannelInboundHandlerAdapater子类:它定义了
下面的方法:
protected abstract void initChannel(C ch) throws Exception;
这个方法提供了一种将多个ChannelHandler添加到一个ChannelPipeline中的简便方法,你只需要
简单地向Bootstrap或者ServerBootstrap的实例提供你的ChannelInitializer实现即可,并且一旦
Channel被注册到了它的EventLoop之后,就会调用你的initChannel()版本。在该方法返回之后,
ChannelInitializer的实例将会从ChannelPipeline中移除它自己,所以,在我们自己的应用程序中,
如果存在着某个Handler只使用一次的情况,也可以伪造Channelinitializer,用完以后将自己从ChannelPipeline中移除自己,比如授权Handler,某客户端第一次连接登录以后,进行授权检查,检查通过后,就可以把这个

在这里插入图片描述

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

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

相关文章

layui表格中使用cascader后导致表格滚动条消失

修改前,受影响页面 修改后最终想要的效果 修改方法

TIM编码器接口(编码器测速)

定时器编码器接口自动计次--------->对应手册14.3.12编码器接口模式 应用场景: 电机控制PWM驱动电机,编码器测电机速度,PID算法闭环控制 ------------------------------------------------------------------------------------------…

Java IO详解

一、流的概念与作用 流(Stream): 在Java IO中,流是一个核心的概念。流从概念上来说是一个连续的数据传输过程。人们根据数据传输特性将流抽象为各种类,方便更直观的进行数据操作。你既可以从流中读取数据,也可以往流中写数据。流的…

计算机毕业设计SSM基于的高校学习资源共享系统

项目运行 环境配置: Jdk1.8 Tomcat7.0 Mysql HBuilderX(Webstorm也行) Eclispe(IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持)。 项目技术: vue mybatis Maven mysql5.7或8.0等等组成,B…

Camtasia2023破解版下载

Camtasia2023破解版是一款简单好用的屏幕录像软件,它结屏幕录制和录制视频编辑等功能于一身,不管是用来创建视频教程还是相关教学视频或者操作演示等都是不二的选择,软件支持录制全屏或者部分区域进行选择录制,可录制网络摄像头、…

DTAN: Diffusion-based Text Attention Network for medical imagesegmentation

DTAN:基于扩散的医学图像分割文本关注网络 摘要 在当今时代,扩散模型已经成为医学图像分割领域的一股开创性力量。在此背景下,我们引入了弥散文本注意网络(Diffusion text - attention Network, DTAN),这是一个开创性的分割框架&#xff0c…

第五节笔记:LMDeploy 大模型量化部署实践

大模型部署背景 参数用FP16半精度也就是2字节,7B的模型就大约占14G 2.LMDeploy简介 量化降低显存需求量,提高推理速度 大语言模型推理是典型的访问密集型,因为是decoder only的架构,需要token by token的生成,因…

【数据结构排序算法篇】----基数排序【实战演练】

作为一名对技术充满热情的学习者,我一直以来都深刻地体会到知识的广度和深度。在这个不断演变的数字时代,我远非专家,而是一位不断追求进步的旅行者。通过这篇博客,我想分享我在某个领域的学习经验,与大家共同探讨、共…

鸿蒙语言ArkTS(更好的生产力与性能)

ArkTS是鸿蒙生态的应用开发语言 ArkTS提供了声明式UI范式、状态管理支持等相应的能力,让开发者可以以更简洁、更自然的方式开发应用。 同时,它在保持TypeScript(简称TS)基本语法风格的基础上,进一步通过规范强化静态检…

Quantitative Analysis: PIM Chip Demands for LLAMA-7B inference

1 Architecture 如果将LLAMA-7B模型参数量化为4bit,则存储模型参数需要3.3GB。那么,至少PIM chip 的存储至少要4GB。 AiM单个bank为32MB,单个die 512MB,至少需要8个die的芯片。8个die集成在一个芯片上。 提供816bank级别的访存带…

贪心第一天,别太贪了

今天是贪心第一天,做376. 摆动序列时脑子都要干烧了,贪心的题还是很有意思的,对于理论知识,我觉得做题的时候就想这两个问题吧: 如何找到局部最优解呢?用这个局部最优解模拟示例后能通过吗? 455…

智慧公厕的主要应用

在现代社会中,随着城市化进程的加速推进,公共卫生设施的建设和管理变得愈加重要。而智慧公厕作为一种新型城市公共设施,正以其智能化、高效化的特点,成为改善城市卫生环境的重要手段。智慧公厕运用物联网、互联网、大数据、云计算…