【Rust光年纪】探秘Rust GUI库:从安装配置到API概览
Rust语言GUI库全方位比较:选择适合你的工具
前言
在现代软件开发中,图形用户界面(GUI)库扮演着至关重要的角色。随着Rust语言的不断发展,越来越多的优秀的GUI库也相继问世,为Rust开发者提供了更多选择。本文将介绍几个用于Rust语言的优秀GUI库,以及它们的核心功能、安装与配置方法和API概览,希望能够为Rust开发者在GUI开发领域提供一些帮助。
欢迎订阅专栏:Rust光年纪
文章目录
- Rust语言GUI库全方位比较:选择适合你的工具
- 前言
- 1. conrod:一个用于Rust语言的可扩展的GUI库
- 1.1 简介
- 1.1.1 核心功能
- 1.1.2 使用场景
- 1.2 安装与配置
- 1.2.1 安装指南
- 1.2.2 基本配置
- 1.3 API 概览
- 1.3.1 组件管理
- 1.3.2 布局系统
- 2. [druid:一个用于Rust语言的数据驱动的GUI库](https://github.com/linebender/druid)
- 2.1 简介
- 2.1.1 核心功能
- 2.1.2 应用场景
- 2.2 安装与配置
- 2.2.1 安装说明
- 2.2.2 基本设置
- 2.3 API 概览
- 2.3.1 数据绑定
- 2.3.2 事件处理
- 3. egui:一个简单易用的即时模式GUI库
- 3.1 简介
- 3.1.1 核心功能
- 3.1.2 使用场景
- 3.2 安装与配置
- 3.2.1 安装步骤
- 3.2.2 基本配置
- 3.3 API 概览
- 3.3.1 UI 组件
- 3.3.2 自定义绘制
- 4. gtk-rs:Rust语言中的GTK+封装库
- 4.1 简介
- 4.1.1 核心功能
- 4.1.2 使用场景
- 4.2 安装与配置
- 4.2.1 安装指导
- 4.2.2 基本设置
- 4.3 API 概览
- 4.3.1 组件使用
- 4.3.2 信号与回调
- 5. iced:一个跨平台的GUI库,支持响应式设计
- 5.1 简介
- 5.1.1 核心功能
- 5.1.2 使用场景
- 5.2 安装与配置
- 5.2.1 安装说明
- 5.2.2 初始配置
- 5.3 API 概览
- 5.3.1 状态管理
- 5.3.2 界面构建
- 6. native-windows-gui:Rust语言的Windows原生GUI库
- 6.1 简介
- 6.1.1 核心功能
- 6.1.2 应用场景
- 6.2 安装与配置
- 6.2.1 安装方法
- 6.2.2 基本设置
- 6.3 API 概览
- 6.3.1 窗口管理
- 6.3.2 控件操作
- 总结
1. conrod:一个用于Rust语言的可扩展的GUI库
1.1 简介
Conrod 是一个 Rust 语言编写的可扩展的 GUI 库,旨在提供简单易用的界面设计和用户交互功能。它基于现代的 OpenGL 渲染,并支持众多常见的用户界面元素。
1.1.1 核心功能
- 提供丰富的用户界面组件,如按钮、文本框、滑块等。
- 支持布局系统,可实现灵活的界面排版。
- 与 Rust 生态系统良好集成,提供稳健的性能和可靠的类型安全。
1.1.2 使用场景
Conrod 可用于开发各种类型的应用程序,包括桌面应用程序、游戏界面、数据可视化工具等,适合需要定制化界面和优秀性能的项目。
1.2 安装与配置
1.2.1 安装指南
你可以通过 Cargo,在 Rust 项目的 Cargo.toml 文件中添加以下依赖来安装 Conrod:
[dependencies]
conrod = "0.70"
然后运行 cargo build 即可下载并构建 Conrod。
1.2.2 基本配置
在你的 Rust 项目中,你需要引入 Conrod crate 并初始化 GUI 窗口,示例如下:
extern crate conrod;use conrod::backend::glium::glium;
use conrod::backend::glium::glium::glutin;
use conrod::backend::glium::glium::{DisplayBuild, Surface};
use conrod::backend::glium::Renderer;
use conrod::backend::glium::convert_event;fn main() {// 创建窗口let display = glium::glutin::WindowBuilder::new().with_title("Conrod with glium!").with_dimensions((1024, 768).into()).build_glium().unwrap();// 定义 Conrod 的渲染器let mut renderer = Renderer::new(&display).unwrap();// 其他初始化工作...
}
1.3 API 概览
1.3.1 组件管理
Conrod 提供了丰富的组件用于构建用户界面,例如创建一个简单的按钮:
let ui = &mut user_interface.set_widgets();
widget_ids!(struct Ids { button });
Button::new().middle_of(ui.window).w_h(200.0, 50.0).set(ids.button, ui);
1.3.2 布局系统
Conrod 的布局系统采用了一种类似自然语言的布局描述方式,允许用户轻松定义界面组件的位置及大小,例如:
Text::new("Hello, Conrod!").mid_top_of(ids.canvas).color(conrod::color::WHITE).font_size(48).set(ids.text, ui);
更多信息请参阅 Conrod 官方文档
希望以上内容对你有所帮助!
2. druid:一个用于Rust语言的数据驱动的GUI库
2.1 简介
2.1.1 核心功能
Druid 是一个用于 Rust 语言的数据驱动的 GUI 库,旨在提供现代化、灵活和高性能的用户界面开发体验。其核心功能包括:
- 响应式 UI:基于数据驱动的 UI 更新机制。
- 组件化设计:通过组合和嵌套小型部件来构建复杂的界面。
- 跨平台支持:兼容 Windows、macOS 和 Linux 等不同操作系统。
2.1.2 应用场景
Druid 可用于构建各种类型的桌面应用程序,包括但不限于编辑器、IDE、数据可视化工具等。
2.2 安装与配置
2.2.1 安装说明
你可以通过 Cargo,在你的 Cargo.toml 文件中添加以下行来安装 Druid:
[dependencies]
druid = "0.9"
2.2.2 基本设置
首先,确保你已经安装了 Rust 编程语言的开发环境。然后,创建一个新的 Rust 项目并在 Cargo.toml 中添加如上所示的依赖项。接着,运行 cargo build 来构建你的项目。
2.3 API 概览
2.3.1 数据绑定
Druid 支持简单而强大的数据绑定,可以将 UI 元素直接绑定到数据模型上,实现 UI 和数据的自动同步更新。以下是一个简单的数据绑定示例:
use druid::widget::Label;
use druid::{AppLauncher, LocalizedString, PlatformError, Widget, WidgetExt, WindowDesc};fn main() -> Result<(), PlatformError> {let main_window = WindowDesc::new(ui_builder);AppLauncher::with_window(main_window).use_simple_logger().launch("Hello, Druid!")
}fn ui_builder() -> impl Widget<String> {Label::new("Hello, World!").center()
}
2.3.2 事件处理
Druid 提供了丰富的事件处理功能,可以轻松地响应用户输入、交互等事件。以下是一个简单的事件处理示例:
use druid::{AppLauncher, LocalizedString, PlatformError, Widget, WidgetExt, WindowDesc};
use druid::widget::Button;fn main() -> Result<(), PlatformError> {let main_window = WindowDesc::new(ui_builder);AppLauncher::with_window(main_window).use_simple_logger().launch("Hello, Druid!")
}fn ui_builder() -> impl Widget<String> {Button::new("Click me").on_click(|_, _, _| println!("Button clicked"))
}
以上是 Drudi GUI 库的简要介绍及示例代码。更多详细信息请访问 Druid 官方文档。
3. egui:一个简单易用的即时模式GUI库
3.1 简介
3.1.1 核心功能
egui 是一个用于 Rust 编程语言的轻量级、快速的即时模式 GUI 库。它具有简单易用的API,适用于游戏开发、工具制作以及数据可视化等不同的场景。
3.1.2 使用场景
egui 适用于需要快速构建交互界面的项目,特别是对性能和轻量级的要求较高的项目。
3.2 安装与配置
3.2.1 安装步骤
你可以通过在项目的 Cargo.toml 文件中添加以下依赖来安装 egui:
[dependencies]
egui = "0.12"
更多安装方式以及更新信息,请参考 egui GitHub 页面。
3.2.2 基本配置
基本的配置通常包括创建窗口、设置 UI 元素和处理用户输入。下面是一个简单的示例代码:
use egui::{ctx, Color32, FontDefinitions, CtxRef, InnerResponse};fn ui(ctx: &CtxRef) {egui::CentralPanel::default().show(ctx, |ui| {ui.label("Hello, egui!");});
}fn main() {let options = eframe::NativeOptions {drag_and_drop_support: false,initial_window_size: Some(egui::vec2(320.0, 240.0)),..Default::default()};let app = eframe::run_native(eframe::Settings { native_options: options, ..Default::default() },|title: &str, _app: &CtxRef| ui(ctx),);
}
3.3 API 概览
3.3.1 UI 组件
egui 提供了丰富多样的 UI 组件,包括按钮、文本框、滑块等。通过简单的API调用,可以快速构建出符合设计需求的交互界面。详细的组件列表和使用方法请查看 egui 官方文档.
3.3.2 自定义绘制
除了内置的 UI 组件外,egui 还支持自定义绘制。通过简单的代码实现,可以实现各种独特的UI效果,满足个性化的设计需求。以下是一个简单的自定义绘制示例:
fn custom_painters(ui: &mut egui::Ui) {// 在画布上绘制一个红色的矩形let rect = egui::Rect::from_min_max(egui::pos2(100.0, 100.0), egui::pos2(200.0, 200.0));ui.painter().rect_filled(rect, 0.0, Color32::RED);
}fn ui(ctx: &CtxRef) {egui::CentralPanel::default().show(ctx, |ui| {custom_painters(ui); // 调用自定义绘制函数});
}
以上是 egui GUI 库的简单介绍和基本使用方法,希望对你有所帮助。更多详细的内容可以查阅 egui 官方文档。
4. gtk-rs:Rust语言中的GTK+封装库
4.1 简介
gtk-rs 是一个在 Rust 语言中使用 GTK+ 的封装库,可以方便地在 Rust 中开发图形用户界面(GUI)应用程序。
4.1.1 核心功能
- 提供了对 GTK+ 库的 Rust 绑定,使得开发者可以在 Rust 语言中直接调用 GTK+ 的功能。
- 支持丰富的组件和控件,可以创建各种类型的窗口、按钮、菜单等用户界面元素。
4.1.2 使用场景
gtk-rs 适合于想要在 Rust 语言中开发跨平台图形界面应用程序的开发者。它提供了使用 GTK+ 库的便利性,同时能够充分发挥 Rust 语言的安全性和并发性。
4.2 安装与配置
4.2.1 安装指导
要使用 gtk-rs,首先需要安装 GTK+ 库及其开发文件。具体安装步骤可以参考GTK+ 官方网站。
然后,在 Rust 项目的 Cargo.toml 文件中添加 gtk-rs 的依赖:
[dependencies]
gtk = "0.9"
4.2.2 基本设置
在 Rust 代码中引入 gtk-rs 库:
extern crate gtk;
use gtk::prelude::*;
use gtk::{Button, Window, WindowType};
4.3 API 概览
4.3.1 组件使用
下面是一个简单的示例,演示如何创建一个窗口并在其中添加一个按钮:
use gtk::Button;fn main() {// 初始化 GTK 库gtk::init().unwrap();// 创建一个新窗口let window = Window::new(WindowType::Toplevel);// 创建一个新按钮let button = Button::new_with_label("Click me!");// 将按钮添加到窗口中window.add(&button);// 显示窗口和其中的元素window.show_all();// 进入主事件循环gtk::main();
}
4.3.2 信号与回调
在 GTK+ 中,可以通过信号与回调机制来处理用户界面事件。以下示例演示了如何为按钮的点击事件绑定一个回调函数:
use gtk::Button;
use gtk::Window;fn main() {// ...(初始化窗口和按钮)// 为按钮的 clicked 信号绑定一个回调函数button.connect_clicked(|_| {println!("Button clicked!");});// ...(其他代码)gtk::main();
}
更多关于 gtk-rs 的信息,可以访问官方网站 gtk-rs 官方文档
希望以上内容能够帮助到你!
5. iced:一个跨平台的GUI库,支持响应式设计
Iced 是一个跨平台的 GUI 库,使用 Rust 语言编写,并支持响应式设计。它提供了丰富的 API 和组件,可以用于构建漂亮而功能丰富的用户界面。
5.1 简介
Iced 提供了一系列核心功能和适用的使用场景。
5.1.1 核心功能
- 跨平台支持:Iced 可以在 Windows、macOS、Linux 等多个平台上运行。
- 响应式设计:支持构建响应式的用户界面,使得界面可以根据不同的设备尺寸和屏幕密度进行自适应调整。
5.1.2 使用场景
Iced 适合用于构建各种类型的桌面应用程序,包括但不限于数据可视化工具、办公软件、游戏客户端等等。
5.2 安装与配置
下面是关于 Iced 的安装和初始配置说明。
5.2.1 安装说明
首先需要在项目的 Cargo.toml 文件中添加 Iced 的依赖:
[dependencies]
iced = "0.3"
然后通过 Cargo 来安装依赖:
$ cargo build
5.2.2 初始配置
在使用 Iced 之前,通常需要对其进行一些初始配置,例如设置渲染引擎和事件处理器等。这些配置可以在初始化应用程序时完成。
5.3 API 概览
Iced 提供了丰富的 API,主要涉及状态管理、界面构建等方面。
5.3.1 状态管理
Iced 的状态管理主要通过 State 和 Widget 这两个概念来实现。State 表示组件的状态,而 Widget 表示一个可交互的 UI 元素。通过这两者的结合,可以实现对界面状态的管理和更新。
以下是一个简单的状态管理实例代码:
use iced::{button, Button, Column, Element, Sandbox, Settings};pub fn main() {Button::new(&mut state, "Click me!").on_press(Message::ButtonPressed);
}
更多关于状态管理的详细信息,请参考官方文档:Iced State Management
5.3.2 界面构建
Iced 提供了丰富的 UI 组件和布局方式,可以用于构建复杂的用户界面。其中包括按钮、文本框、滑块等常见控件,同时也支持自定义组件的开发。
以下是一个简单的界面构建实例代码:
use iced::{button, Button, Column, Element, Sandbox, Settings};pub fn main() {let button = Button::new(&mut state, "Click me!").on_press(Message::ButtonPressed);let content = Column::new().push(button).into();
}
更多关于界面构建的详细信息,请参考官方文档:Iced Widget API
6. native-windows-gui:Rust语言的Windows原生GUI库
6.1 简介
native-windows-gui 是一个基于 Rust 语言的 Windows 原生 GUI 库,它提供了简洁易用的 API 接口,使开发者能够轻松创建和管理 Windows 上的 GUI 应用程序。
6.1.1 核心功能
- 提供窗口管理功能
- 支持常见控件操作
- 可以处理用户输入事件
6.1.2 应用场景
native-windows-gui 适用于需要在 Windows 平台上开发图形化界面的项目,例如桌面应用程序、工具软件等。
6.2 安装与配置
6.2.1 安装方法
你可以通过 Cargo,在你的 Rust 项目的 Cargo.toml 文件中添加以下依赖来安装 native-windows-gui:
[dependencies]
native-windows-gui = "0.4"
然后执行 cargo build 即可完成安装。
更多详情请参考:native-windows-gui GitHub 页面
6.2.2 基本设置
在你的 Rust 项目中,你需要添加如下引用来使用 native-windows-gui:
extern crate native_windows_gui as nwg;
6.3 API 概览
6.3.1 窗口管理
native-windows-gui 提供了创建和管理窗口的功能。以下是一个创建简单窗口的示例代码:
use native_windows_gui as nwg;fn main() {nwg::init().expect("Failed to init Native Windows GUI");let _app = nwg::SimpleApp::new();let window = nwg::Window::builder().title("Hello").build(&nwg::None);nwg::dispatch_thread_events();
}
6.3.2 控件操作
除了窗口管理外,native-windows-gui 也支持常见控件操作,例如按钮、文本框等。以下是一个创建按钮的示例代码:
let button = nwg::Button::builder().text("Click me").build(&window);
想要了解更多控件操作的内容,请查看官方文档:native-windows-gui 文档
通过这些简单的示例代码,你已经可以开始使用 native-windows-gui 来开发你的 Windows GUI 应用了。
总结
通过本文的介绍,我们对Rust语言中的几个重要的GUI库有了一个全面的认识。conrod作为一个可扩展的GUI库,在组件管理和布局系统上具有突出特点;druid则以数据驱动的方式为特色,适用于各种应用场景;egui简单易用,适合快速开发原型或小型项目;gtk-rs提供了对GTK+的封装,适合构建跨平台应用;iced支持响应式设计,使得界面开发更加灵活;而native-windows-gui专注于Windows原生GUI开发,为Windows平台的开发者提供了便利。无论是可扩展性、数据驱动、跨平台支持还是原生Windows开发,Rust语言都有着丰富的GUI库选择,可以满足不同开发需求。
相关文章:
【Rust光年纪】探秘Rust GUI库:从安装配置到API概览
Rust语言GUI库全方位比较:选择适合你的工具 前言 在现代软件开发中,图形用户界面(GUI)库扮演着至关重要的角色。随着Rust语言的不断发展,越来越多的优秀的GUI库也相继问世,为Rust开发者提供了更多选择。本…...
Element plus部分组件样式覆盖记录
文章目录 一、el-button 样式二、Popconfirm 气泡确认框三、Popover 气泡卡片四、Checkbox 多选框五、Pagination 分页六、Form 表单七、Table 表格 一、el-button 样式 html: <el-button class"com_btn_style">button</el-button>样式覆盖…...
重塑业务生态,Vatee万腾平台:引领行业变革的新引擎
在数字经济浪潮汹涌的今天,传统行业的边界正被不断模糊与重塑,新兴技术如云计算、大数据、人工智能等正以前所未有的速度改变着商业世界的面貌。在这一背景下,Vatee万腾平台应运而生,以其独特的创新模式和强大的技术实力ÿ…...
标准术语和定义中的【架构】应该如何描述
一、参考国家标准和国际标准中对“架构”的描述 (1)GB/T 8566-2022 国家标准 架构的术语描述:(系统)在其环境中的一些基本概念或性质,体现在其元素关系,以及设计与演进原则中。 (2)ISO/IEC/IEEE 42010 国际标准 架构的…...
华为鸿蒙Core Vision Kit 骨骼检测技术
鸿蒙Core Vision Kit 是华为鸿蒙系统中的一个图像处理框架,旨在提供各种计算机视觉功能,包括物体检测、人脸识别、文本识别等。骨骼检测是其中的一项功能,主要用于检测和识别人类身体的骨骼结构。 骨骼检测的关键点 骨骼点检测:通…...
Table API SQL系统(内置)函数System (Built-in) Function详解
目录 函数类型 引用函数 函数精确引用 函数模糊引用 函数解析顺序 精确的函数引用 模糊的函数引用 系统函数 标量函数(Scalar Functions) 比较函数(Comparison Functions) 逻辑函数(Logical Functions) 算术函数(Arithmetic Functions) 字符串函数(Strin…...
一键运行RocketMQ5.3和Dashboard
一键运行RocketMQ5.3和Dashboard 目录 一键运行RocketMQ5.3和Dashboard通过Docker Compose 来一键启动运行的容器包括docker-compose.yml文件运行命令启动本地效果查看 参考信息 通过Docker Compose 来一键启动 运行的容器包括 NameServerBrokerProxyDashBoard docker-compo…...
HAL STM32 SG90舵机驱动控制
HAL STM32 SG90舵机驱动控制 🔖测试对象:STM32F103SG90舵机 🌼功能实现:通过串口指令,控制SG90舵机转动到指定角度。 ✨在实际硬件舵机驱动过程中,使用SG90普通舵机空载运转情况下,电流在180mA…...
【Kubernetes】k8s集群图形化管理工具之rancher
目录 一.Rancher概述 1.Rancher简介 2.Rancher与k8s的关系及区别 3.Rancher具有的优势 二.Rancher的安装部署 1.实验准备 2.安装 rancher 3.rancher的浏览器使用 一.Rancher概述 1.Rancher简介 Rancher 是一个开源的企业级多集群 Kubernetes 管理平台,实…...
AI编程系列一1小时完成链家房价爬虫程序
背景 AI编程实在太火,写了很多年的Java,现在Python 和Go 简单好用,今天结合智谱清言快速完成一个程序爬虫程序,没有任何Python 编程经验,只需要会提问,熟悉简单HTML结构即可。未来一定是有业务能力者的福…...
【JavaEE初阶】文件内容的读写—数据流
目录 📕 引言 🌴 数据流的概念 🚩 数据流分类 🌳 字节流的读写 🚩 InputStream(从文件中读取字节内容) 🚩 OutputStream(向文件中写内容) 🎄 字符流的…...
Spring Boot项目中使用Sharding-JDBC实现读写分离
Sharding-JDBC是一个分布式数据库中间件,它不仅支持数据分片,还可以轻松实现数据库的读写分离。下面是如何在Spring Boot项目中集成Sharding-JDBC并实现读写分离的详细步骤: 目录 1. 引入依赖 2. 配置数据源 3. 配置Sharding-JDBC相关参数…...
【网络安全】SSO登录过程实现账户接管
未经许可,不得转载。 文章目录 正文正文 登录页面展示了“使用 SSO 登录”功能: 经分析,单点登录(SSO)系统的身份验证过程如下: 1、启动SSO流程:当用户点击按钮时,浏览器会发送一个GET请求到指定的URL: /idp/auth/mid-oidc?req=[UNIQUE_ID]&redirect_uri=[REDI…...
Admin.NET源码学习(3:LazyCaptcha使用浅析)
Admin.NET项目前端登录页面的验证码图片默认使用动态图,且图形内容为阿拉伯数字运算(如下图所示),用户输入正确的计算结果才能正常登录。项目采用LazyCaptcha模块生成验证码及动态图。 在Admin.NET.Core项目中添加了Lazy.Cap…...
在原生未启用kdump的BCLinux 8系列服务器上启用kdump及报错处理
本文记录了在原生未启用kdump的BCLinux 8系列操作系统的服务器上手动启用kdump服务及报错处理的过程。 一、问题描述 BCLinux 8系列操作系统,系统初始化安装时未启用kdump服务,手动启动时报以下“No memory reserved for crash kernel”或“ConditionK…...
Android架构组件中的MVVM
Android架构组件中的MVVM(Model-View-ViewModel)模式是一种广泛应用的设计模式,它通过将应用程序分为三个主要部分(Model、View、ViewModel)来分离用户界面和业务逻辑,从而提高代码的可维护性、可扩展性和可…...
走向绿色:能源新选择,未来更美好
当前,全球范围内可再生能源正经历着从辅助能源向核心能源的深刻转型,绿色能源日益渗透至居住、出行、日常应用等多个领域,深刻影响着我们的生活方式,使我们能够更加充分地体验清洁能源所带来的优质生活。 一、绿色能源与“住” …...
鸿蒙装饰器的介绍
State装饰器, State装饰的变量,称为状态变量,与声明式范式中的其他被装饰变量一样,是私有的,只能从组件内部访问,在声明时,必须指定其类型和本地初始化。 Provide装饰器和Consume装饰器&#…...
零基础5分钟上手亚马逊云科技核心云架构知识 - 权限管理最佳实践
简介: 欢迎来到小李哥全新亚马逊云科技AWS云计算知识学习系列,适用于任何无云计算或者亚马逊云科技技术背景的开发者,通过这篇文章大家零基础5分钟就能完全学会亚马逊云科技一个经典的服务开发架构方案。 我会每天介绍一个基于亚马逊云科技…...
[数据库][知识]SQL Server、MySQL 和 Oracle 的默认端口和数据库链接
SQL Server、MySQL 和 Oracle 的默认端口号、连接 URL 和驱动类名。以下是对每个数据库连接信息的简要说明: SQL Server 默认端口号:1433JDBC URL 格式:jdbc:sqlserver://localhost:1433;DatabaseNamedbnameJDBC 驱动类名:com.mic…...
Chapter03-Authentication vulnerabilities
文章目录 1. 身份验证简介1.1 What is authentication1.2 difference between authentication and authorization1.3 身份验证机制失效的原因1.4 身份验证机制失效的影响 2. 基于登录功能的漏洞2.1 密码爆破2.2 用户名枚举2.3 有缺陷的暴力破解防护2.3.1 如果用户登录尝试失败次…...
React Native 开发环境搭建(全平台详解)
React Native 开发环境搭建(全平台详解) 在开始使用 React Native 开发移动应用之前,正确设置开发环境是至关重要的一步。本文将为你提供一份全面的指南,涵盖 macOS 和 Windows 平台的配置步骤,如何在 Android 和 iOS…...
在四层代理中还原真实客户端ngx_stream_realip_module
一、模块原理与价值 PROXY Protocol 回溯 第三方负载均衡(如 HAProxy、AWS NLB、阿里 SLB)发起上游连接时,将真实客户端 IP/Port 写入 PROXY Protocol v1/v2 头。Stream 层接收到头部后,ngx_stream_realip_module 从中提取原始信息…...
什么是Ansible Jinja2
理解 Ansible Jinja2 模板 Ansible 是一款功能强大的开源自动化工具,可让您无缝地管理和配置系统。Ansible 的一大亮点是它使用 Jinja2 模板,允许您根据变量数据动态生成文件、配置设置和脚本。本文将向您介绍 Ansible 中的 Jinja2 模板,并通…...
佰力博科技与您探讨热释电测量的几种方法
热释电的测量主要涉及热释电系数的测定,这是表征热释电材料性能的重要参数。热释电系数的测量方法主要包括静态法、动态法和积分电荷法。其中,积分电荷法最为常用,其原理是通过测量在电容器上积累的热释电电荷,从而确定热释电系数…...
技术栈RabbitMq的介绍和使用
目录 1. 什么是消息队列?2. 消息队列的优点3. RabbitMQ 消息队列概述4. RabbitMQ 安装5. Exchange 四种类型5.1 direct 精准匹配5.2 fanout 广播5.3 topic 正则匹配 6. RabbitMQ 队列模式6.1 简单队列模式6.2 工作队列模式6.3 发布/订阅模式6.4 路由模式6.5 主题模式…...
MySQL 8.0 事务全面讲解
以下是一个结合两次回答的 MySQL 8.0 事务全面讲解,涵盖了事务的核心概念、操作示例、失败回滚、隔离级别、事务性 DDL 和 XA 事务等内容,并修正了查看隔离级别的命令。 MySQL 8.0 事务全面讲解 一、事务的核心概念(ACID) 事务是…...
在鸿蒙HarmonyOS 5中使用DevEco Studio实现企业微信功能
1. 开发环境准备 安装DevEco Studio 3.1: 从华为开发者官网下载最新版DevEco Studio安装HarmonyOS 5.0 SDK 项目配置: // module.json5 {"module": {"requestPermissions": [{"name": "ohos.permis…...
给网站添加live2d看板娘
给网站添加live2d看板娘 参考文献: stevenjoezhang/live2d-widget: 把萌萌哒的看板娘抱回家 (ノ≧∇≦)ノ | Live2D widget for web platformEikanya/Live2d-model: Live2d model collectionzenghongtu/live2d-model-assets 前言 网站环境如下,文章也主…...
Vue3 PC端 UI组件库我更推荐Naive UI
一、Vue3生态现状与UI库选择的重要性 随着Vue3的稳定发布和Composition API的广泛采用,前端开发者面临着UI组件库的重新选择。一个好的UI库不仅能提升开发效率,还能确保项目的长期可维护性。本文将对比三大主流Vue3 UI库(Naive UI、Element …...
