广告
返回顶部
首页 > 资讯 > 后端开发 > Python >对Netty组件的基本介绍
  • 508
分享到

对Netty组件的基本介绍

2024-04-02 19:04:59 508人浏览 八月长安

Python 官方文档:入门教程 => 点击学习

摘要

Netty的介绍 netty是一个异步的基于事件的框架,主要针对在tcp协议下,开发面向clients端的高

Netty的介绍

netty是一个异步的基于事件的框架,主要针对在tcp协议下,开发面向clients端的高并发应用。

netty本质是一个NIO框架。

io模型

Java共支持3中io模型 : BIO,aiO,NIO

BIO

同步阻塞,一个连接一个线程,有连接请求时服务端就需要启动一个线程处理。如果这个线程不做任何事就会造成不必要的开销。当并发数较大时,需要创建大量线程来处理连接。

NIO

同步非阻塞,可以做到一个线程处理多个操作。

NIO 有三大核心部分,Channel,Buffer ,selector

selector、 channel 和buffer的关系

  1. 每个channel 对应一个buffer
  2. selector 对应一个线程,一个线程对应多个channel
  3. 程序切换哪个channel 是由事件决定的。event
  4. selector 会根据不同的事件,在各个通道上切换
  5. Buffer 就是一个内存块,底层是有一个数组
  6. 数据的读取写入是通过buffer,既可以读也可以写, 两者切换的方法是flip
  7. channel 是双向的

Buffer缓冲区

一个可以读写数据的内存块,可以理解成一个容器对象。它负责从channel中读取数据,封装成Buffer对象。Buffer为每一个基本数据类型都提供了实现类。它主要有三个属性:

  • capacity

内存块的固定大小值

  • position

下一个要进行读写位置的索引

  • limit

在写模式下,limit = position ,在读模式下,它表示你最多读到之前写入的最大值

重要的方法

allocate(int count) 初始化buffer容量

get () 从 position 位置读

flip() 由写模式切换为读模式

Channel 通道

作用类似于流,但是可以同时进行读写,可以异步读写。

Channel在NIo中是一个接口,它的实现类有:

  • FileChannel 用于文件读写
  • ServerSocketChannel TCP数据读写
  • DatagramChannel 用于UDP数据读写

主要方法:

  • read 从通道读取数据并放到缓冲区中
  • write 把缓冲区的数据写到通道中
  • transferfrom
  • transferto

Selector 选择器

能够监测多个注册的通道上是否有事件发生,如果有事件发生获取事件交给通道处理。

主要方法:

  • open 获取一个选择器对象
  • SelectionKey reGISter(seelctor,常量) 注册通道 ,常量一共有4种,read读,write写,connect 连接已建立 ,accept(有新的网络连接可以接入)
  • select() 监测所有注册的通道,阻塞

原生NIo存在的问题

类库与api复杂,开发难度大,有bug

Netty模型

  1. netty抽象出2组线程池,bossGroup 负责接受客户端的连接,workGroup 负责读写
  2. bossGroup 与workerGroup 都是NioEventLoopGroup
  3. 每一个NioEventLoopGroup相当于一个事件循环组,每个循环都是NIoEventLoop
  4. NIoEventLoop表示一个不断循环处理执行任务的线程

Netty核心模块组件

Bootstrap,ServerBootstrap

Channel

ChannelFuture

netty中所有操作都是异步的,所以我们需要一个能够确定其结果的方法。通过addListener() 方法获取通知。

ChannelHandler

处理入站和出栈逻辑的容器。

生命周期方法

handlerAdded 当ChannelHandler 添加到ChanelPipeLine中调用

handlerRemoved 移除时调用

它主要有2个子接口, ChannelInboundHandler 和 ChannelOutBoundHandler

ChannelPipeLine

它是ChannelHandler 的容器,内部定义了一组ChannelHandler,是一组过滤器链

ChannelHandlerContext

用于ChannelPipe 和 ChannelHandler的关联,同一个ChannelPipeline 里的ChannelHandler的交互。

ByteBuf

netty的数据容器,是netty实现数据传输的数据结构

内部维护了两个不同的索引,readIndex ,writeIndex。通过这两个索引将数据划分为3个区域。已经读过的字节,可读字节,可写字节。相比于jdk原生的bytebuf ,它有两个指针,在读写转换时不需要进行flip()

到此这篇关于对Netty组件的基本介绍的文章就介绍到这了,更多相关Netty组件介绍内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

--结束END--

本文标题: 对Netty组件的基本介绍

本文链接: https://www.lsjlt.com/news/129509.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • 对Netty组件的基本介绍
    Netty的介绍 netty是一个异步的基于事件的框架,主要针对在tcp协议下,开发面向clients端的高...
    99+
    2022-11-12
  • WPF基本控件介绍
    上一章讲到了布局、这点就有点类似建筑设计、第一步是出图纸、整体的结构、而第二步就是堆砌, 建筑学里面也会有很多描述, 例如砖头,水泥、玻璃、瓷板。而在WPF中, 这一切的基础也就是控...
    99+
    2022-11-13
  • Vue组件基础操作介绍
    目录一、组件二、组件的创建三、组件中的data四、组件中的methods一、组件 组件是vue的重要的特征之一,可以扩展html的功能,也可以封装代码实现重复使用。 二、组件的创建 ...
    99+
    2023-01-14
    Vue组件创建 Vue组件data Vue组件methods
  • Linux中文件的基本属性介绍
    一、查看文件属性和权限 linux系统是一种典型的多用户系统,不同的用户处于不同的地位,拥有不同的权限。为了保护系统的安全性,Linux系统对不同的用户访问同一文件(包括目录文件)的权限做了不同的规定。 在Linux中我...
    99+
    2022-06-05
    Linux 文件基本属性
  • Linux组基本介绍知识点总结
    一、linux组基本介绍 在Linux中每个用户必须属于一个组,不能独立于组外。在Linux中每个文件有所有者,所在组,其他组的概念 1)所有者 2)所在组 3)其他组 4)改变用户的所在组 二、文件/目录 所有者 一...
    99+
    2022-06-04
    Linux
  • Csh的基本语法介绍
    在*unix系统中,常用的shell有sh,bash,csh/tcsh, ksh. sh来自于systemV的Unix,是传统的Unix的shell,直到现在很多的系统管理员仍然喜欢使用sh。 bash来自...
    99+
    2022-06-04
    语法 Csh
  • GoldenGate的基本原理介绍
    本篇内容介绍了“GoldenGate的基本原理介绍”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!什么是Go...
    99+
    2022-10-18
  • Rman的基本命令介绍
    本篇内容主要讲解“Rman的基本命令介绍”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Rman的基本命令介绍”吧!可以用RMAN环境来打开和关闭数据库: [or...
    99+
    2022-10-18
  • Java的基本概念介绍
    本篇内容介绍了“Java的基本概念介绍”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!   Java概述:    目前Java主要应用于中间件...
    99+
    2023-06-03
  • 【mysql】—— 函数的基本介绍
    前言: MySQL是一种常用的关系型数据库管理系统,它提供了许多内置的函数来进行数据操作和处理。本期,我将给大家介绍的就是关于 “函数” 的相关知识!!! 目录 (一)日期函数 (二)字符串函数 (三)数学函数 (四)其它函数 总结 ...
    99+
    2023-09-16
    mysql 数据库
  • Dockerfile的基本语法介绍
    这篇文章主要讲解了“Dockerfile的基本语法介绍”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Dockerfile的基本语法介绍”吧!Dockerfile的组成Dockerfile分为...
    99+
    2023-06-04
  • MYSQL的基本SQL语句介绍
    下文主要给大家带来MYSQL的基本SQL语句介绍,希望这些内容能够带给大家实际用处,这也是我编辑MYSQL的基本SQL语句介绍这篇文章的主要目的。好了,废话不多说,大家直接看下文吧。MYSQL介绍MySQL...
    99+
    2022-10-18
  • Sql Server的基本函数介绍
    这篇文章主要介绍“Sql Server的基本函数介绍”,在日常操作中,相信很多人在Sql Server的基本函数介绍问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Sql Se...
    99+
    2022-10-18
  • HTML5 canvas的基本语法介绍
    本篇内容主要讲解“HTML5 canvas的基本语法介绍”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“HTML5 canvas的基本语法介绍”吧!canvas ...
    99+
    2022-10-19
  • zabbix的安装和基本介绍
    这篇文章主要讲解了“zabbix的安装和基本介绍”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“zabbix的安装和基本介绍”吧!系统版本CentOS Lin...
    99+
    2022-10-18
  • Python基础中的元组介绍
    本篇内容主要讲解“Python基础中的元组介绍”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Python基础中的元组介绍”吧!一、概述元组创建很简单,只需要在括号中添加元素,并使用逗号隔开即可。...
    99+
    2023-06-02
  • PHP数组基本概念详细介绍是怎样的
    PHP数组基本概念详细介绍是怎样的,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。数组在我们PHP中是很重要的,如何利用数组实现我们想要的功能,我们这里就来看看关...
    99+
    2023-06-17
  • python基本数据类型的介绍
    int(整型)在32位机器上,整数的位数为32位,取值范围为-2**31~2**31-1,即-2147483648~2147483647在64位系统上,整数的位数为64位,取值范围为-2**63~2**63-1,即-922337203685...
    99+
    2023-01-31
    数据类型 python
  • Android中Protobuf的基本使用介绍
    目录前言一、Proto文件示例二、在Android中的使用1、 plugin配置2.、基本调用总结前言 Protobuf,类似于json和xml,是一种序列化结构数据机制,可以用于数...
    99+
    2022-11-13
  • Python列表的基本操作介绍
    目录1、向List中添加元素的方法1.1 Python append()方法添加元素1.2 Python extend()方法添加元素1.3 Python insert()方法插入元...
    99+
    2022-11-12
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作