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.mzph.cn/news/686019.shtml

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

相关文章

应对.[henderson@cock.li].mkp勒索病毒:数据恢复与预防措施

尊敬的读者: 在数字化时代,勒索病毒已成为企业和个人数据安全的威胁之一。本文将深入介绍[hendersoncock.li].mkp[hudsonLcock.li].mkp [myersairmail.cc].mkp勒索病毒的特点,提供被其加密的数据文件的恢复方法,并分享一些预防措…

设计模式--职责链模式(Chain of Responsibility Pattern)

职责链模式(Chain of Responsibility Pattern)是一种行为设计模式,它为请求创建了一个接收者对象的链。 这种模式给予请求的类型,对请求的发送者和接收者进行解耦。这种类型的设计模式属于行为型模式。 在职责链模式中&#xff0…

代码随想录 Leetcode435. 无重叠区间

题目&#xff1a; 代码(首刷看解析 2024年2月17日&#xff09;&#xff1a; class Solution { private:const static bool cmp(vector<int>& a,vector<int>& b) {return a[0] < b[0];} public:int eraseOverlapIntervals(vector<vector<int>&…

学习Android的第十二天

目录 Android SeekBar&#xff1a;拖动条控件 SeekBar 属性 SeekBar 事件 SeekBar 定制 范例&#xff1a; 参考文档 Android RatingBar 星级评分条 RatingBar 属性 RatingBar 样式 RatingBar 事件 范例&#xff1a; 官方文档 Android ScrollView 滚动视图 Scroll…

MessageQueue --- RabbitMQ

MessageQueue --- RabbitMQ RabbitMQ IntroRabbitMQ 核心概念RabbitMQ 分发类型Dead letter (死信)保证消息的可靠传递 RabbitMQ Intro 2007年发布&#xff0c;是一个在AMQP&#xff08;高级消息队列协议&#xff09;基础上完成的&#xff0c;可复用的企业消息系统&#xff0c;…

java 宠物医院系统Myeclipse开发mysql数据库web结构jsp编程计算机网页项目

一、源码特点 java 宠物医院系统是一套完善的java web信息管理系统&#xff0c;对理解JSP java编程开发语言有帮助&#xff0c;系统具有完整的源代码和数据库&#xff0c;系统主要采用B/S模式开发。开发环境为TOMCAT7.0,Myeclipse8.5开发&#xff0c;数据库为Mysql5.0&…

c语言遍历文件夹中的文件

文件目录如下&#xff0c;文件夹里还有一些txt文件未展示出来。 使用递归实现&#xff0c;深度优先遍历文件夹中的文件。 代码如下&#xff0c;用了一点C的语法。 #include <io.h> #include <iostream> using namespace std;#define MAX_PATH_LENGTH 100int Tr…

人工智能学习与实训笔记(四):神经网络之自然语言处理

目录 六、自然语言处理 6.1 词向量 (Word Embedding) 6.1.1 词向量的生成过程 6.1.2 word2vec介绍 6.1.3 word2vec&#xff1a;skip-gram算法的实现 6.2 句向量 - 情感分析 6.2.1 LSTM (Long Short-Term Memory)介绍 6.2.2 基于飞桨实现的情感分析模型 6.3 BERT 六、自…

unreal engine5.1中设置convex decomposition凸包分解

UE5系列文章目录 文章目录 UE5系列文章目录前言一、convex decomposition是什么&#xff1f;二、convex decomposition属性设置 前言 今天使用ue5根据网上教程制作可操控直升机&#xff0c;找属性convex decomposition凸包分解&#xff0c;默认的碰撞如下图 如果想使用精细化…

Android Studio安装SDK失败解决办法

Android Studio安装SDK失败解决办法 安装SDK时界面会显示安装的连接&#xff0c;同时在你选择的安装SDK的文件夹里面会生成一些目录和文件&#xff0c;在你选择放SDK的目录下有一个叫做.temp的文件夹&#xff0c;里面放的就是下载的临时文件。 .temp内部的文件夹里面能看到下…

mysql出现unblock with ‘mysqladmin flush-hosts‘

产生的原因是&#xff1a; 同一个ip在短时间内产生太多&#xff08;超过mysql数据库max_connect_errors的最大值&#xff09;中断的数据库连接而导致的阻塞。 解决方法1&#xff1a;修改max_connect_errors的值 (1)进入Mysql数据库查看max_connect_errors&#xff1a; > sh…

求最小生成树相关例题题解

一.前言 求最小生成树常用的两种算法&#xff1a;prim算法和kruskal算法&#xff0c;之前我已经总结过prim算法的相关知识和使用方法&#xff08;详细可以看这篇博客&#xff09;&#xff0c;而kruskal算法比较简单&#xff0c;更好操作&#xff08;主要通过并查集和排序&…

【深度学习】使用tensorflow实现VGG19网络

【深度学习】使用tensorflow实现VGG19网络 本文章向大家介绍【深度学习】使用tensorflow实现VGG19网络&#xff0c;主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项&#xff0c;具有一定的参考价值&#xff0c;需要的朋友可以参考一下。 VGG网络与AlexNet类似…

wayland(xdg_wm_base) + egl + opengles——dma_buf 作为纹理数据源(五)

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 前言一、EGL dma_buf import 相关的数据结构和函数1. EGLImageKHR2. eglCreateImageKHR()3. glEGLImageTargetTexture2DOES()二、egl 中 import dma_buf 作为纹理的代码实例1. egl_wayland_dmabuf_…

Why Not Http?

游戏服务器开发主要是基于socket&#xff0c;或者websocket&#xff0c;很少采用http&#xff08;可能有部分非常轻量级的服务器选择http&#xff09;。这是什么原因呢&#xff1f;我们先来看看socket与http之间的区别。 socket与http之间的区别 socket与http对比 sockethttpT…

【c++】list 模拟

> 作者简介&#xff1a;დ旧言~&#xff0c;目前大二&#xff0c;现在学习Java&#xff0c;c&#xff0c;c&#xff0c;Python等 > 座右铭&#xff1a;松树千年终是朽&#xff0c;槿花一日自为荣。 > 目标&#xff1a;能手撕list模拟 > 毒鸡汤&#xff1a;不为模糊…

红队ATKCK|红日靶场Write-Up(附下载链接)

网络拓扑图 下载地址 在线下载&#xff1a; http://vulnstack.qiyuanxuetang.net/vuln/detail/2/ 百度网盘 链接&#xff1a;https://pan.baidu.com/s/1nlAZAuvni3EefAy1SGiA-Q?pwdh1e5 提取码&#xff1a;h1e5 环境搭建 通过上述图片&#xff0c;web服务器vm1既能用于外…

学习Android的第十三天

目录 Android TextClock 文本时钟控件 TextClock 控件主要属性和方法 简单的 TextClock 参考文档 Android AnalogClock 控件 AnalogClock 属性 Android Chronometer 计时器 Chronometer 属性 Chronometer 主要方法 范例&#xff1a; 完整的计时器 范例&#xff1a; …

Rust 学习笔记 - Hello world

前言 本文将讲解如何完成一个 Rust 项目的开发流程&#xff0c;从编写 “Hello, World!” 开始&#xff0c;到使用 Cargo 管理和运行项目。 编写 Hello world 开始一个新项目很简单&#xff0c;首先&#xff0c;创建一个包含 main.rs 文件的 hello_world 文件夹&#xff0c;…

基于Doris构建亿级数据实时数据分析系统

转载至我的博客 https://www.infrastack.cn &#xff0c;公众号&#xff1a;架构成长指南 背景 随着公司业务快速发展&#xff0c;对业务数据进行增长分析的需求越来越迫切&#xff0c;与此同时我们的业务数据量也在快速激增、每天的数据新增量大概在30w 左右&#xff0c;一年…