当前位置: 首页 > news >正文

Rust Web开发常用库

本集合中所有库都是在开源项目中广泛使用且在2024年积极维护的库,排名靠前的库是当前使用比较广泛的,不全面但够用

Rust异步运行时

tokio:异步运行时

async_std:与标准库兼容性较强的运行时

monoio:字节开源

smol:一个小型快速的运行时

RustWeb框架&网络通信

  • 其他Web框架见https://juejin.cn/post/7406997325715554315

axum:注重人体工程学和模块化的 Web 应用程序框架,Tokio团队开源

axum-server:设计用于axumhyper实现

  • HTTP/1 和 HTTP/2
  • 通过rustls或openssl进行 HTTPS
  • 通过hyper来实现高性能
  • 使用tower制作服务 API
  • 对axum有非常好的兼容性

actix:高性能、异步、强大的路由系统和中间件支持

rocket:简洁的语法、强大的类型安全和可扩展性

volo:字节跳动服务框架团队研发的轻量级、高性能、可扩展性强、易用性好的 Rust RPC 框架,借鉴了actix、axum、hyper、tokio、tonic、tower

  • Thrif
  • gRPC

hyper:底层HTTP实现

  • 专注于实现 HTTP 协议本身,包括解析 HTTP 请求和构建 HTTP 响应

tower:用于构建可组合的网络服务的库,Tokio 官方支持的构建异步网络服务中间件框架,Axum,Tower-web,Tonic 这些项目,都广泛使用了 Tower 这层抽象

  • 适用于构建复杂的网络服务架构,需要灵活地组合各种功能模块的场景
  • 适用于需要在不同的网络协议之间进行切换或同时支持多种协议时的场景

tonic:基于 HTTP/2 和 gRPC 服务的库

  • 支持 gRPC 的双向流、一元调用等特性,也可以作为HTTP/2处理使用
  • 适用于需要构建高性能的分布式系统,并且使用 gRPC 或 HTTP/2 进行通信的场景

prost:Protocol Buffers的Rust实现,Tokio出品

  • 支持proto2、proto3

tonic-build:tonic-build可以为 Rust 生成服务端和客户端的代码框架

serde:高效且通用地序列化和反序列化 Rust 数据结构的框架

reqwest:添加重试机制可以提高与外部服务交互的可靠性

ipnet:网络地址转换

mime:Media Type,媒体类型(也通常称为多用途互联网邮件扩展或 MIME 类型)是一种标准,用来表示文档、文件或一组数据的性质和格式

  • application/javascript; charset=utf-8
  • text/css; charset=utf-8

Rust错误处理

anyhow:捕获错误

thiserror:自定义错误

failure:使错误处理更加结构化和可维护

Rust配置管理

dotenvy:设置开发与生产环境,可在.env文件中读取配置

Rust时间和日期

chrono:操作时间日期、时间感知

uuid:生成uuid

Rust数据处理

serde_json:JSON 序列化和反序列化

base64:用于 Base64 编码和解码

hex:十六进制编码和解码

Rust数据验证

validator:数据验证

  • 检查字符串的长度、格式等
  • 验证数字的范围
  • 检查邮箱地址、URL 等格式的正确性

schemars:Json验证

  • 兼容serde

valico:Json验证

Rust图像处理

image:图像处理功能,包括加载、保存、转换图像格式、调整大小、裁剪等

Rust音频处理

rodio:用于音频播放和录制

Rust服务发现、配置管理、服务管理

rnacos:用于与rnacos交互

rs_consul:用于与 Consul 进行交互的 Rust 库。Consul 是一个流行的服务发现和配置管理工具

etcd_client:用于与 etcd 分布式键值存储进行交互,etcd 也可以用于服务发现

zookeeper_client:与 ZooKeeper 进行交互

zookeeper:与 ZooKeeper 进行交互的客户端

serde_yaml_ng:可以用于解析、序列化 YAML 格式的配置文件,结合标准库的文件操作std::fs可以实现配置管理

Rust日志管理、可观测性

tracing:Tokio维护,分布式跟踪的 SDK,全面的、可扩展的跟踪和诊断工具,用于采集监控数据,也可以用作日志,注重跟踪

tracing-subscriber :提供了一组订阅器(subscribers),用于消费和处理 Tracing 生成的事件。订阅器可以用于输出日志到不同的目标,比如控制台、文件等

tracing-appender:Tokio维护,用于将 Tracing 事件输出到不同目标的 appender。它可以帮助将日志记录到文件、标准输出等不同的位置,

tracing-error:将 Rust 的错误类型与 Tracing 的 span 相关联的库

tracing-log:用于将 Tracing 事件转换为标准的 log 框架(如 log crate)事件的工具。这使得 Tracing 可以与其他使用 log 框架的库协同工作

tracing-opentelemetr:提供了一个集成 Tracing 和 OpenTelemetry 的桥梁。它允许将 Tracing 生成的跟踪信息转换为 OpenTelemetry 格式,以便与 OpenTelemetry 的生态系统进行集成

opentelemetry:用于收集分布式系统中的跟踪、指标和日志数据

opentelemetry-otlp:Opentelemetry 的一个组件,用于将跟踪和指标数据发送到 OpenTelemetry Protocol(OTLP)兼容的后端,如 Zipkin、Jaeger 等

slog:功能强大的日志库,支持多种后端,如控制台、文件、系统日志,更注重结构化日志记录

log:基础的日志库,支持不同的日志级别,如error!warn!info!debug!trace!

env_logger:通过读取环境变量来配置日志级别和输出格式,可以结合log使用

clap:以声明式或程序式的方式创建命令行解析器,提供参数行为、帮助生成、用户建议修复、彩色输出、shell补全等命令行功能

Rust与k8s

kube:包含一个 Kubernetes 客户端、一个控制器运行时、一个自定义资源派生和各种工具

Rust数据库

sqlx:异步sql工具包

  • 手动编写 SQL 语句并进行参数绑定
  • 适合对性能有较高要求且需要精细控制 SQL 查询的场景
  • 适合当开发者希望充分利用 Rust 的类型系统来确保数据库操作的正确性时使用
  • 数据库支持
DatabaseVersionDriverURL
MariaDB10.1+mysqlmysql://root:root@localhost:3306
Microsoft SQL Server2019mssql (等待完全重写驱动)
MySQL5.6, 5.7, 8.0mysqlmysql://root:root@localhost:3306
PostgreSQL9.5+postgrespostgres://root:root@localhost:5432
SQLite3.20.1+sqlitesqlite:./sqlite.db?mode=rwc

seaql:查询生成器,支持 MySQL、Postgres 和 SQLite

  • 允许以类型安全的方式构建复杂的 SQL 查询
  • 强调查询的灵活性和可组合性,可以方便地构建动态查询
  • 适用于需要构建复杂 SQL 查询的项目,尤其是那些对查询的灵活性和可维护性要求较高的场景
  • 适用于对不同数据库以统一方式构建查询的场景
  • 数据库支持
DatabaseDriver
MariaDBsqlx-mysql
MySQLsqlx-mysql
PostgreSQLsqlx-postgres
SQLitesqlx-sqlite
rusqliterusqlite

sea-orm:依赖于sqlx,基于seaql构建的异步动态ORM框架,是对seaql的扩展

  • 提供了更全面的对象关系映射(ORM)解决方案

  • 适合希望以面向对象编程(OOP)的方式进行数据库操作的项目

  • 对于大型项目或者需要进行复杂数据库操作和实体关系管理的场景,SeaORM可以提高开发效率

  • 数据库支持

DatabaseURL
MySQLmysql://root:root@localhost:3306
PostgreSQLpostgres://root:root@localhost:5432
SQLite(在文件中)sqlite:./sqlite.db?mode=rwc
SQLite(在内存中)sqlite::memory:

Rust AI

burn:用 Rust 构建的极高的灵活性、计算效率和可移植性的深度学习框架,是一个高级别的机器学习框架,可以用如Candle这类低级别的深度学习框架作为后端

  • WGPU (WebGPU):跨平台 GPU 后端
  • Candle:使用 Candle 绑定的后端
  • LibTorch:使用 LibTorch 绑定的后端
  • NdArray:使用 NdArray 原语作为数据结构的后端
  • autodiff:将反向传播引入任何后端的后端装饰器
  • Fusion:将内核融合引入支持它的后端的后端装饰器

candle_core:Huggingface维护的机器学习框架

相关文章:

Rust Web开发常用库

本集合中所有库都是在开源项目中广泛使用且在2024年积极维护的库,排名靠前的库是当前使用比较广泛的,不全面但够用 Rust异步运行时 tokio:异步运行时 async_std:与标准库兼容性较强的运行时 monoio:字节开源 smol…...

ios内购支付-支付宝APP支付提现

文章目录 前言一、IOS内购支付(ios订单生成自己写逻辑即可)1.支付回调票据校验controller1.支付回调票据校验server 二、安卓APP支付宝支付1.生成订单返回支付宝字符串(用于app拉起支付宝,这里用的是证书模式)2.生成订…...

新课发布|鸿蒙HarmonyOS Next商城APP应用开发实战

2024年年初,鸿蒙HarmonyOS Next星河版强势发布,随着鸿蒙系统的普及和应用场景的拓展,市场需求将持续增加。鸿蒙系统已经应用于华为的智能手机、平板电脑、智能家居等多个领域,并有望在未来拓展到智能汽车、物联网等更多领域。这为…...

基于Java,SpringBoot,Vue智慧校园健康驿站体检论坛请假管理系统

摘要 互联网发展至今,无论是其理论还是技术都已经成熟,而且它广泛参与在社会中的方方面面。它让信息都可以通过网络传播,搭配信息管理工具可以很好地为人们提供服务。针对信息管理混乱,出错率高,信息安全性差&#xf…...

【数据分享】2001-2023年我国省市县镇四级的逐月平均气温数据(免费获取/Shp/Excel格式)

之前我们分享过1901-2023年1km分辨率逐月平均气温栅格数据,该数据来源于国家青藏高原科学数据中心。为方便大家使用,我们还基于上述平均气温栅格数据将数据处理为Shp和Excel格式的省市县三级逐月平均气温数据(可查看之前的文章获悉详情&#…...

c#代码介绍23种设计模式_16迭代器模式

目录 1、迭代器模式的介绍 2、迭代器模式的定义 3、迭代器模式的结构 4、代器模式角色组成 5、迭代器实现 6、迭代器模式的适用场景 7、迭代器模式的优缺点 8、.NET中迭代器模式的应用 9、实现思路 1、迭代器模式的介绍 迭代器是针对集合对象而生的,对于集合对象而言…...

408算法题leetcode--第23天

236. 二叉树的最近公共祖先 236. 二叉树的最近公共祖先\思路:递归,如注释时间和空间:O(n) /*** Definition for a binary tree node.* struct TreeNode {* int val;* TreeNode *left;* TreeNode *right;* TreeNode(int x) …...

帝国CMS系统开启https后,无法登陆后台的原因和解决方法

今天本地配置好了帝国CMS7.5,传去服务器后,使用http访问一切正常。但是当开启了https(SSL)后,后台竟然无法登陆进去了。 输入账号密码后,点击登陆,跳转到/e/admin/ecmsadmin.php就变成页面一片…...

根据视频id查询播放量

声明:文章仅用于学习交流,如有侵权请联系删除 如何根据视频ID查询视频的播放数量 在数字化时代,视频内容的消费已成为人们日常生活的重要组成部分。无论是社交媒体平台上的短视频,还是视频分享网站上的长视频,了解视频的播放数量…...

初始爬虫11

1.斗鱼selenium爬取 # -*- coding: utf-8 -*- from selenium import webdriver from selenium.webdriver.common.by import By import timeclass Douyu(object):def __init__(self):self.url https://www.douyu.com/directory/allself.driver webdriver.Chrome()self.driver…...

SSY20241002提高组T4题解__纯数论

题面 题目描述 有一天 p e o p 1 e peop1e peop1e 学长梦到了一个丑陋的式子: ∑ i 1 n ( ∑ m 1 R F m ) ! i ! ∑ l 0 i ∑ j 0 ∑ t 1 R F t { K i − l } l ! { i ∑ w 1 R F w − j } j ! \sum_{i1}^n (\sum_{m1}^R F_m)!\times i!\times \sum_{l…...

Python:lambda 函数详解 以及使用

一、lambda 语法 lambda 函数的语法只包含一个语句,表现形式如下: lambda [arg1 [,arg2,.....argn]]:expression 其中,lambda 是 Python 预留的关键字,[arg…] 和 expression 由用户自定义。 具体如下: [arg…] 是参数列表&#…...

【C++】空指针和野指针

文章目录 1.空指针2.野指针总结 1.空指针 概念:指针变量指向内存中编号为0的空间。 用途:初始化指针变量。 注意:空指针指向的内存是不可以访问的。 示例: int main(){//指针变量p指向内存地址编号为0的空间int *PNULL&#…...

大模型提示词

纯输入版提示工程词 输出一个九九乘法口诀表 当然可以!以下是九九乘法口诀表: 1 x 1 1 1 x 2 2 2 x 2 4 1 x 3 3 2 x 3 6 3 x 3 9 1 x 4 4 2 x 4 8 3 x 4 12 4 x 4 16 1 x 5 5 2 x 5 10 3 x 5 15 4 x 5 20 5 …...

在线css像素px到Em的转换器

具体请前往:在线Px转Em工具--将绝对像素(px)长度单位转换为相对长度em...

回溯算法解决排列组合及子集问题

216. 组合总和 III39. 组合总和40. 组合总和 II46. 全排列47. 全排列 II77. 组合 78. 子集 90. 子集 II 以上是力扣设计相关问题的题目。排列组合还是子集问题无非就是从序列 nums 中以给定规则取若干元素,主要有以下几类: 元素无重不可复选&#xff0…...

Unity中Mesh多种网格绘制模式使用方法参考

Unity中MeshFilter中的Mesh默认情况下使用MeshTopology.Trigangles类型绘制网格,就是通常的绘制三角形网格,实际上Mesh有五种绘制模式,对应MeshTopology的枚举,分别是 Triangles网格由三角形构成。Quads网格由四边形构成。Lines网…...

【Spring Security】基于SpringBoot3.3.4版本②如何配置免鉴权Path

基于Spring Boot 3.3.4,详细说明Spring Security 6.3.3的使用 摘要本地开发环境说明SecurityFilterChain介绍application.ymlWen3SecurityProperties.java修改DemoWen3Security修改SecurityFilterChainIgnoredPathController.javaIgnoredPathController2.java启动工程测试测试…...

信息学奥赛复赛复习11-CSP-J2020-04方格取数-动态规划、斐波那契数列、最优子结构、重叠子问题、无后效性

PDF文档回复:20241004 1 P7074 [CSP-J2020] 方格取数 [题目描述] 设有 nm 的方格图,每个方格中都有一个整数。现有一只小熊,想从图的左上角走到右下角,每一步只能向上、向下或向右走一格,并且不能重复经过已经走过的方格&#x…...

Hive数仓操作(十二)

一、Hive 中的行列转换 1. 行转列: collect_list() collect_list() 函数用于将一个列中的数据收集成一个数组。 示例数据文件 假设有一个名为 orders.txt 的文件,内容如下: 1,101 1,101 1,103 2,104 2,105导入数据到 Hive 表 首先&…...

在软件开发中正确使用MySQL日期时间类型的深度解析

在日常软件开发场景中,时间信息的存储是底层且核心的需求。从金融交易的精确记账时间、用户操作的行为日志,到供应链系统的物流节点时间戳,时间数据的准确性直接决定业务逻辑的可靠性。MySQL作为主流关系型数据库,其日期时间类型的…...

<6>-MySQL表的增删查改

目录 一,create(创建表) 二,retrieve(查询表) 1,select列 2,where条件 三,update(更新表) 四,delete(删除表&#xf…...

大话软工笔记—需求分析概述

需求分析,就是要对需求调研收集到的资料信息逐个地进行拆分、研究,从大量的不确定“需求”中确定出哪些需求最终要转换为确定的“功能需求”。 需求分析的作用非常重要,后续设计的依据主要来自于需求分析的成果,包括: 项目的目的…...

DockerHub与私有镜像仓库在容器化中的应用与管理

哈喽,大家好,我是左手python! Docker Hub的应用与管理 Docker Hub的基本概念与使用方法 Docker Hub是Docker官方提供的一个公共镜像仓库,用户可以在其中找到各种操作系统、软件和应用的镜像。开发者可以通过Docker Hub轻松获取所…...

Linux相关概念和易错知识点(42)(TCP的连接管理、可靠性、面临复杂网络的处理)

目录 1.TCP的连接管理机制(1)三次握手①握手过程②对握手过程的理解 (2)四次挥手(3)握手和挥手的触发(4)状态切换①挥手过程中状态的切换②握手过程中状态的切换 2.TCP的可靠性&…...

蓝桥杯 2024 15届国赛 A组 儿童节快乐

P10576 [蓝桥杯 2024 国 A] 儿童节快乐 题目描述 五彩斑斓的气球在蓝天下悠然飘荡,轻快的音乐在耳边持续回荡,小朋友们手牵着手一同畅快欢笑。在这样一片安乐祥和的氛围下,六一来了。 今天是六一儿童节,小蓝老师为了让大家在节…...

django filter 统计数量 按属性去重

在Django中,如果你想要根据某个属性对查询集进行去重并统计数量,你可以使用values()方法配合annotate()方法来实现。这里有两种常见的方法来完成这个需求: 方法1:使用annotate()和Count 假设你有一个模型Item,并且你想…...

C++课设:简易日历程序(支持传统节假日 + 二十四节气 + 个人纪念日管理)

名人说:路漫漫其修远兮,吾将上下而求索。—— 屈原《离骚》 创作者:Code_流苏(CSDN)(一个喜欢古诗词和编程的Coder😊) 专栏介绍:《编程项目实战》 目录 一、为什么要开发一个日历程序?1. 深入理解时间算法2. 练习面向对象设计3. 学习数据结构应用二、核心算法深度解析…...

【 java 虚拟机知识 第一篇 】

目录 1.内存模型 1.1.JVM内存模型的介绍 1.2.堆和栈的区别 1.3.栈的存储细节 1.4.堆的部分 1.5.程序计数器的作用 1.6.方法区的内容 1.7.字符串池 1.8.引用类型 1.9.内存泄漏与内存溢出 1.10.会出现内存溢出的结构 1.内存模型 1.1.JVM内存模型的介绍 内存模型主要分…...

【LeetCode】3309. 连接二进制表示可形成的最大数值(递归|回溯|位运算)

LeetCode 3309. 连接二进制表示可形成的最大数值(中等) 题目描述解题思路Java代码 题目描述 题目链接:LeetCode 3309. 连接二进制表示可形成的最大数值(中等) 给你一个长度为 3 的整数数组 nums。 现以某种顺序 连接…...