Netty基础知识

news2024/9/22 3:42:56

官网地址: https://netty.io/

快速入门:https://netty.io/wiki/user-guide-for-4.x.html

Netty 是一个 NIO 客户端服务器框架,方便快速、简单地开发网络应用程序。

NIO(Non-blocking I/O,在Java领域,也称为New I/O),是一种同步非阻塞的I/O模型,也是I/O多路复用的基础。

注意:netty 5.x版本被弃用了,现在推荐的版本是4.x。被弃用的原因是5.x的API太复杂了,而且不稳定。

特性

设计

  • 对于多种传输类型具有统一的API。
  • 基于灵活的、可扩展的事件模型,这个事件模型可以清晰的分离关注点。
  • 可以定制线程模型,可以是单线程,或者是有一个或多个线程的线程池,例如SEDA。
  • 支持无连接的数据报套接字(从3.1版本开始)。

性能

  • 更好的吞吐量,更低的延迟。
  • 更少的资源消耗。
  • 最小化不必要的内存拷贝。

安全

  • 完全支持SSL/TLS和StartTLS。(

    扩展:StartTLS不是一个协议,而是一个用在邮件的命令,邮件客户端通过StartTLS告诉服务器端要将不安全的协议升级为安全的协议,比如SSL或TLS。参见:https://mailtrap.io/blog/starttls-ssl-tls/

netty架构

官方文档:https://netty.io/3.8/guide/#architecture

下面是netty的整体架构图。

在这里插入图片描述

强大的缓冲数据结构(Rich Buffer Data Structure)

Netty拥有自己的buffer API,它具有下面的特点:

  • 如果有需要,可以定义自己的buffer类型。
  • 通过内建的复合buffer类型可以达到零拷贝(zero copy)
  • 提供开箱即用的动态buffer类型。
  • 不需要调用flip()方法。注:这个flip()是java中buffer的方法,作用是调整buffer的起始位置和容量。
  • 比ByteBuffer速度快。

ChannelBuffer的组合与切分

在通信层(communication layers)进行数据传输的时候,数据经常会被组合和切分。

Netty支持零拷贝方式,具体是通过将ChannelBuffer指向需要的buffer,以此消除对数据拷贝的需要。

在这里插入图片描述

统一的异步I/O API

Netty通过抽象各种传输协议的操作,编写了统一的异步I/O接口。

基于Netty的应用程序从一个传输协议切换到另外一个传输协议非常的容易,只需要修改几行代码就可以完成。

基于拦截器模式的事件模型

Netty拥有定义良好的事件模型。当实现自己的事件类型的时候,不会打破已经存在的代码。

支持快速开发的高级组件

Netty提供了许多的高级特性支持快速开发网络应用程序。

编解码框架

Netty提供了编解码框架,可以将socket的数据接收与业务代码进行分离。

支持SSL/TLS

在java里面要支持SSL/TLS是非常复杂的,需要自己管理javax.net.ssl.SSLEngine。

Netty提供了SslHandler来处理SSLEngine中的细节和陷进。

开发程序的时候,只需要将SslHandler放入到ChannelPipeline中就可以了。

HTTP的实现

HTTP其他的实现都是在较高的层次,都已经是封装好了,开发者可以直接使用。

Netty在较低层次提供了对HTTP协议的操作,开发者可以根据自己的需要在netty http上实现特殊的功能,比如传输1GB的大文件。

WebSocket的实现

WebSocket可以在单个TCP Socket上建立双向、全双工的通信通道。WebSocket的设计目标是支持数据在Web 浏览器和服务器之间流动。

Netty实现了WebSocket协议。

整合Google Protocol Buffer

通过ProtobufEncoder和ProtobufDecoder,可以将the Google Protocol Buffers Compiler (protoc)生成的消息接入到Netty。

总结

Netty的架构由三部分组成——buffer、channel、event model,其他高级特性都是在这三个核心组件上构建的。

netty要解决的问题

通用的协议,比如HTTP,在某些特定的场景下并不能很好的发挥作用,比如传输大文件、多人游戏、实时的金融信息,在这些场景下就需要实现特定的协议来满足需求。

解决方案

Netty项目致力于提供一个异步的事件驱动网络应用程序框架,并且提供工具加速高性能、高扩展协议服务器和客户端的构建。

Netty的底层哲学是设计出给你舒适体验的API和实现。

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

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

相关文章

《牛虻》读后感

《牛虻》这本书是同事送的,最近换工作、搬家很多杂事,也就没有多少看书的兴致,所以断断续续看了快两周才看完。这是爱尔兰女作家埃塞尔丽莲伏尼契的代表作,在我国声名远播,是一代人的精神食粮。怀着崇敬的心情翻开这本…

淘宝天猫商品详情接口API解密:如何轻松找到最适合的商品?

在当今的电子商务时代,淘宝和天猫作为国内最大的电商平台,每天都有海量的商品供我们选择。如何从这庞大的商品库中寻找到最适合自己的商品?这就需要我们掌握一种高效的搜索方式——详情接口API解密。本文将为您详细解析这一技术,助…

基于强化学习的即时商店自动化管理

介绍 如今,提示是与大型语言模型 (LLM) 交互的主要模式。提示需要根据用户需求进行调整,为 LLM 提供正确的上下文和指导 — 以最大限度地提高获得“正确”响应的机会。 这导致了提示工程 [1] 的兴起,并成为一门专业学科,提示工程师…

docker容器数据卷、数据卷基本案例

在docker里面创建也会在主机中生成文件 并且docker停止 时在主机中创建文件仍然可以生成在docker中

EmguCV学习笔记 VB.Net 6.4 霍夫变换

版权声明:本文为博主原创文章,转载请在显著位置标明本文出处以及作者网名,未经作者允许不得用于商业目的。 EmguCV是一个基于OpenCV的开源免费的跨平台计算机视觉库,它向C#和VB.NET开发者提供了OpenCV库的大部分功能。 教程VB.net版本请访问…

提升大模型内容创作能力

前言 现在的大模型能够创作一些故事、小说等等,但是大多数时候创作出来的剧情都是泛泛而谈,并没人给读者很爽的感觉。近期已经有一些工作开始在该方面进行发力,即让大模型做内容消费,如果大模型能够源源不断的创作出好的剧情来供…

幅频特性曲线分析及使用WPF绘制

文章目录 1、一阶惯性环节的幅频特性曲线分析及绘制2、二阶系统的幅频特性曲线分析及绘制3、一般的系统4、上位机代码实现4.1 一阶惯性系统4.2 二阶系统 5、稳定裕度5.1 幅值裕度5.2 相角裕度 参考 1、一阶惯性环节的幅频特性曲线分析及绘制 这里的a和b可以根据系统的不同修改,…

Ubuntu 22.04上稳定安装与配置搜狗输入法详细教程

摘要:本教程详细介绍了如何在Ubuntu 22.04上安装和配置搜狗输入法,每个步骤详细配图。由于在Ubuntu 24.04上存在兼容性问题,建议用户继续使用稳定的22.04版本。教程涵盖了从更新系统源、安装fcitx输入法框架,到下载和配置搜狗输入…

12、stm32通过dht11读取温湿度

一、配置 二、代码 dht11.c /** dht11.c** Created on: Aug 19, 2024* Author: Administrator*/#include "main.h" #include "tim.h" #include "usart.h" #include "gpio.h" /**TIM3定时器实现us级延时*/ void Delay_us(uint16…

谷歌登录的时候,要求在手机的通知点是,并按数字来验证身份,但是手机通知栏没有收到通知和数字,原因是什么,怎么办?

前两天,有个朋友联系到GG账号服务,说他的一个谷歌账号在新设备登录的时候,提示说要在手机的通知栏点击谷歌发来的通知,点击是确认,并且要点按相应的数字。 但问题是他反复刷新手机的通知栏都没有看到谷歌发来的通知&a…

谷粒商城实战笔记-255~256-商城业务-消息队列-SpringBoot整合RabbitMQ

文章目录 一,Spring整合RabbittMq的步骤二,AmqpAdmin使用1. createExchange()2. testCreateQueue()3. createBinding()4,发送消息 这一部分讲解Spring整合RabbitMq的步骤及其使用,包括: 255-商城业务-消息队列-SpringB…

Tita的OKR :产品经理的OKR

产品经理制定的OKR,对组织发展有重大的意义,它能促使产品经理,产品团队,乃至是公司全体员工走出舒适区,超越能力边界。正因为挑战的存在,才使得产品经理才有忧患意识,不断改进产品,从…

【操作系统】10.虚拟内存管理有什么不同?

2.虚拟内存管理有什么不同? 2.1 虚拟内存的基本概念 虚拟内存的概念 具有请求调入和置换功能,从逻辑上对内存容量加以扩充的一种存储器系统 局部性原理 时间局部性 空间局部性 虚拟内存的特征 多次性 对换性 虚拟性 2.1.1 虚拟内存的实现 请求分页存储管…

了解一点电池的工作原理,让它们更好地为我们工作。【手机充电小技巧】(影响电池寿命的主要因素:过充、过放以及高温)

文章目录 引言I 充电小技巧,充分发挥电池性能随充随用都行充电时移除某些保护壳不正常的持续发烫,建议停止充电及时拔掉充电器或者关闭插座电源长期存放时,请保持一半电量。电池健康自动管理II 电池的工作原理快充为便捷,慢充保寿命。锂离子电池以充电周期方式工作,让充电更…

网络层 I(网络层的功能)【★★★★★★】

(★★)代表非常重要的知识点,(★)代表重要的知识点。 一、 路由与转发(★★) 路由器主要完成两个功能: 1. 路由选择 【(确定哪一条路径)根据路由选择协议构…

从零开始搭建Aliyun ESC高可用集群 (HaVip+KeepAlived)

从零开始搭建Aliyun ESC高可用集群 (HaVip+KeepAlived) 架构 架构 本设计方案采用两台阿里云ECS服务器搭建Keepalived结合LVS的高可用集群。使用LVS的TUN模式进行负载均衡,同时利用阿里云的弹性IP(EIP)与高可用虚拟HaVIP实现跨服务器的高可用性。架构中,一台ECS服务器作为…

一文彻底理解大模型 Agent 智能体原理和案例

1 什么是大模型 Agent ? 大模型 Agent,作为一种人工智能体,是具备环境感知能力、自主理解、决策制定及执行行动能力的智能实体。简而言之,它是构建于大模型之上的计算机程序,能够模拟独立思考过程,灵活调…

防火墙基础概念与实验配置

目录 1.防火墙简介 1.1 什么是防火墙? 1.2 防火墙的功能 1.3 防火墙的类型 2.防火墙配置实验 2.1 基本要求 2.2 实验top 3.实验配置 3.1 基础配置 3.1.1 基础配置 3.1.2 安全域配置 3.1.3 配置安全策略 3.1.4 配置NAT 3.1.5 trust->dmz 3.1.6 端口…

代码随想录算法训练营day27 | 贪心算法 | 455.分发饼干、376.摆动序列、53.最大子序和

文章目录 理论基础解题步骤455.分发饼干思路小结 376.摆动序列简单思路贪心思路 53.最大子序和思路 今天是贪心算法的第一天 理论基础 贪心的本质是选择每一阶段的局部最优,从而达到全局最优 在理论上,能使用贪心解决的问题有两个特点:具有…

buuctf [HDCTF2019]Maze

前言:做题笔记。 常规 下载 解压 查壳 脱壳后用32IDA Pro打开。 得,迷宫类型的题目。(字符串有说。) 咳,此前思路对半分不行了。。。 合理猜测步数为:14。 那可以看看7 * 10的迷宫类型。(手动猜测的时候去取倍数如:0 2…