长沙做网站公司合肥网站建设司图

web/2025/9/26 13:05:35/文章来源:
长沙做网站公司,合肥网站建设司图,建立修仙大学,网站建设华网天下公司使用Rust有一段时间了#xff0c;期间尝试过使用Rust做后端开发、命令行工具开发#xff0c;以及做端侧模型部署#xff0c;也尝试过交叉编译、FFI调用等#xff0c;也算是基本入门了。在用Rust做后端接口开发时#xff0c;常常会找不到一些合适库#xff0c;而这些库在J…使用Rust有一段时间了期间尝试过使用Rust做后端开发、命令行工具开发以及做端侧模型部署也尝试过交叉编译、FFI调用等也算是基本入门了。在用Rust做后端接口开发时常常会找不到一些合适库而这些库在Java中却很常见于是在此汇总一下后Rust后端开发中常用的一些库。 基础框架 首先是基础web开发框架在Java中最常用的就是Spring了而Spring其实不单单是一个开发框架而是一整个完整的生态。其中的SpringBoot更是做了很好的封装屏蔽了非常多的细节这也导致了从Java系的web开发转到Rust时会遇到很多问题。而在Rust中显然没有向Spring一样完整的生态支持所以需要我们自己把各个模块组装在一起。 可选项axum、actix-web、warp、rocket 从使用方式和使用难度上来说大同小异axum和rocket可能会更容易上手一点个人目前使用rocket稍微多一点它也支持通过类似于Spring注解的方式来定义接口支持参数映射。但是它似乎没有和SpringBoot类似的参数校验工具比如校验最大最小值、参数长度等目前只能自己实现相关trait来校验了还没有发现一个很好用的校验库来实现自定义返回错误码的功能。 数据库 基本上主流的数据库Rust都是支持的都有Rust客户端而我们开发时更多关注的是ORM框架在Java中最常用的非MyBatis莫属了其实Rust中有一个类似于MyBatis的库叫做rbatis目前还没有尝试过看起来还不错也支持动态SQL只是从xml格式变为html感觉怪怪的。另一个比较常用的就是diesel性能确实不错支持流式处理也支持联表类型安全但是不怎么支持动态SQL所以针对一些复杂查询可能会写的比较费力。 可选项diesel、rbatis、sqlx 其实sqlx不能算作ORM框架但是它比较简单且灵活适合一些小项目使用吧。 缓存 缓存算是中间件了基本上就是看其是否有支持Rust的驱动或者SDK了。常用的Redis有Rust版本的驱动也叫redis。另一个是moka一个内存缓存库也很好用。 可选项redis、moka 除了以上两个常用的外其他缓存大部分也都有Rust版的驱动可以在crates.io上找到 池化 数据库连接、Redis连接以及其他涉及到网络连接的基本都会用到连接池Java里有Hikari、C3P0、DBCP等这些池化工具常常被用来做连接复用连接复用的好处一是能减少频繁创建连接带来的消耗二是可以限制连接数量在有限的系统资源下维持系统的稳定。而在Rust中最常用的一个池化工具就是r2d2它本身支持了许多连接的池化如redis、diesel、sqlx以及postgres和oracle等。我们也可以实现它的trait来管理自定义的需要池化的对象还是很方便的 可选项r2d2、deadpool 除了r2d2外还有一个就是deadpool它是支持异步的而r2d2目前看是同步的所以在并发性能上会有所提升。 多线程和异步 Rust支持async/await关键字来实现异步但这只是一个语法它需要一个异步的runtime来支持异步操作最常用的莫过于tokio了这个名字初次看到感觉也是有点怪怪的。大部分的需要异步的库都集成了tokio。要实现异步只需要为函数加上asnyc即可需要注意的是要对async函数使用.await才会触发执行否则是不会执行的而.await又需要在async中才可以使用所以层层嵌套到最外层到main函数它就需要是async的了我们可以使用#[tokio::main]来开启异步runtime。具体的tokio异步相关的一些问题后面会再总结一下。 可选项tokio 对于tokio中的spwan它和Java线程池中的submit提交一个任务类似spwan提交一个任务后由tokio去调度执行spwan会返回一个JoinHandle有多个任务时使用join!(task1,task2,…)来并发执行即可。使用上还是蛮简单的。 说到多线程那免不了线程间的通信有一个库叫crossbeam提供了一些原子包装类型以及线程安全的channel可以很方便的在多线程中交互比标准库中的channel好用一些。 错误处理 在Java中错误处理一般是自定义的Exception结合业务状态码封装一个统一的响应格式。在Rust中没有异常的概念虽然有panic但是正常来讲在后端服务中应该确保不会发生panic也就是必须要手动处理错误。Rust的每一个库都会有一个它自己的自定义的异常这些异常即Error会暴露给调用方来处理我们可以通过match来匹配指定的Error或者if let来处理对应的Error如果函数使用Result作为返回值还可将Error返回给外层或者用问号?来返回给外层。但是我们通常会使用多个库一个函数里会有多个不同类型的错误这就需要自定义个错误枚举来实现std下的Error给不同的Error类型包装成统一的自定义Error或者结合Boxdyn实现动态包裹Error。而这些操作也可以通过第三方的库来实现常用的就是anyhow。 可选项anyhow、eyre anyhow其实依赖于thiserror而thiserror提供了一些宏来包裹不同类型的错误用法也很简单。我们可以将std::result::Result替换为anyhow的Result返回anyhow!()或者bail!(“”)这样就可以将错误向外传递。 单元测试 Rust中的单元测试使用上比较简单#[test]即可开启测试对于异步的测试使用#[tokio::test]即可开启。需要注意的是如果使用IDE点击运行开始测试的话依赖的feature不会自动检测到可能会报错需要配置一下。其他测试库还没有常见用到后续有用到了再补充。 序列化/反序列化 主要是指Json的序列化和反序列化Java中有FastJson和JacksonRust中有serde_json。serde是一个通用的序列化和反序列化库支持常见的Json、Yaml但是好像不支持XML。使用上很简单在struct上加上#[derive(Serialize, Deserialize)]即可支持序列化和反序列化需要注意的是struct里边的字段也需要支持序列化和反序列化常用的基础数据类型是已经都实现了了的。 可选项serde、serde_json、serde_yaml 除了Json外还有protobufRust也支持叫做prost可以很方便的进行encode和decode它也支持从proto文件生成rs文件构建工具叫做prost-build我们可以在build.rs中配置需要生成的内容。 还有arrow格式这个是一种跨平台的数据格式Rust也是支持的如果需要跨进程传输数据可以使用这个。 消息队列 消息队列也算是中间件常用的kafka、rabbitmq、rocketmq等都有rust版的客户端实现。说到消息队列除了这几个外还有个库叫做zmq用来做网络通信也很不错简单易用支持多种TCP连接模式也支持IPC对于跨进程或者不同机器之间高效通信很适合。 可选项kafka、rabbitmq、rocketmq、zmq 日志 最后就是日志库了无论是Java还是Rust中日志库都很多Java中的Log4j可以对于Rust中的log库都定义了统一的接口有着不同的实现。常用的有env_logger、tracing、log4rstracing还未曾使用过不过看介绍似乎比较复杂一些而env_logger则相对简单很多。env_logger支持不同级别的日志输出支持按model过滤日志级别支持彩色日志但是不支持输出到文件。所以log4rs可能更适合它也支持通过yaml配置日志格式支持不同的输出支持滚动日志看起来是比较适合web后端日志的。 可选项tracing、env_logger、log4rs 其他 除了以上了解到库外还有其他一些使用到的库也记录一下。 rand随机数生成库image 图像处理imageproc实现了一些图像处理相关的算法base64base64编码解码chrono日期时间库这个很常用提供了大量的日期和时间操作APIonce_cell全局静态变量初始化。Rust中static类型不能像Java一样很方便的定义全局静态变量这个库提供了简单的静态变量初始化方式并且线程安全确保只被初始化一次。strum枚举遍历以及枚举值映射reqwest用于简单的http请求tokio-cron-scheduler定时任务dashmap简化并发编程中的hashmap带来的问题 Rust做Web开发有好处也有坏处先说好处。首先确实能够节约机器成本一个Rust包通常来说会比Jar包小很多而运行时占用的内存就比Java小的更多了能够减小5倍左右其次Rust写的程序确实会比Java稳定能够规避一些潜在的问题例如NPE等当然前提是不要到处unwrap否则一样会崩。另外对于客户端来说Tauri使用Rust构架如果做客户端开发前端使用Vue后端使用Rust还是很方便的。还有就是在部署层面Rust可以跨平台编译使用musl工具链编译后基本上可以部署到任何linux系统上对于需要支持不同平台的应用来说非常方便而对于Java来说还需要JVM的环境虽然Java21已经支持原生应用编译了但是依赖于泛型的框架来说编译可能还是有些坑的。 再说不好的地方一是学习成本Rust的确没有Java容易学尤其是对Java越熟悉的转Rust可能反而会比较麻烦因为很多概念两者并不相通这是学习成本并非开发成本因为如果熟悉了Rust的话开发速度其实并不慢我们更多需要的是在开发初期做好设计不论架构还是API否则后续修改起来还是比较痛苦的。所以这也就是Rust做Web开发的另一个不好的地方不能快速适应业务上的变化由于本身的语法限制你不能向Java一样运用各种设计模式来应对业务变化而需要花费更多的时间去衡量是否需要重构或者其他方案换句话说可能对于我们做开发的要求会变高考虑的东西也会变多比如改用String还是str不过从另一种角度看这也提高了我们的编程的严谨性和系统的稳定性吧。 最近也在尝试使用Rust在嵌入式设备上部署例如Yolo等模型以及一些大模型想尝试使用ONNX简化部署流程期间也遇到了很多问题比如OpenCV交叉编译、Rust的交叉编译、FFI调用、跨进程通信等问题。看起来有点混乱这些后续有时间再总结一下。本身是从5年的Java转Rust目前看Rust国内只有量化和区块链这两个方向稍微多一点其他的几乎没有岗位也是一脸迷茫期待后续Rust能够在不同领域发展起来多一些工作机会吧。

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

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

相关文章

家用电脑搭建网站广州市口碑好的网站制作排名

目录 1.背景2.算法原理2.1算法思想2.2算法过程 3.代码实现4.参考文献 1.背景 2020年,Chou 等人受到水母运动行为启发,提出了人工水母搜索算法(Artificial Jellyfish Search Optimizer, JS)。 2.算法原理 2.1算法思想 JS模拟了水母的搜索行为&#xf…

资源seo网站优化排名注册公司代理记账报税

C#.net使用npgsql批量写入数据入库到postgresql数据库 npgsql批量存储数据1. 单条存储2. 批量存储 npgsql批量存储数据 转载自:https://blog.csdn.net/liuwanying0226/article/details/130825503 1. 单条存储 当有类型限定时,例如jsonb,在…

国外网站建设费用南宁市优化网站

jdk只有一个java进程StackOverflow.com上一个普遍的问题是:“ Java程序如何获得自己的进程ID? 与该问题相关的几个答案包括解析ManagementFactory返回的String 。 getRuntimeMXBean() 。 getName() [但是可…

公司网站建设模板seo网站结构优化的方法

文章目录 一、974. 和可被 K 整除的子数组1.题目简介2.解题思路3.代码4.运行结果 二、525. 连续数组1.题目简介2.解题思路3.代码4.运行结果 三、560. 和为 K 的子数组1.题目简介2.解题思路3.代码4.运行结果 总结 一、974. 和可被 K 整除的子数组 1.题目简介 974. 和可被 K 整…

福州省建设局网站辽宁建设工程人才网

1.简述 1 牛顿法简介 牛顿迭代法(Newton’s method)又称为牛顿-拉夫逊(拉弗森)方法(Newton-Raphson method),它是牛顿在17世纪提出的一种在实数域和复数域上近似求解方程的方法。 多数方程不存…

免备案php网站空间查询工商营业执照

Unit8 ldap网络帐号1.ldap是什么ldap目录服务认证,和windows活动目录类似,就是记录数据的一种方式2.ldap客户端所须软件yum sssd krb5-workstation -y3.如何开启ldap用户认证authconfig-tui┌────────────────┤ Authentication Configu…

景安网络网站建设河南响应式官网建设哪里好

一、简述 虽然Segment Anything用于图像分割的通用大模型看起来很酷(飞桨也提供分割一切的模型),但是个人感觉落地应用的时候心里还是更倾向于飞桨这种场景式的,因为需要用到一些人体分割的需求,所以这里主要是对飞桨高性能图像分割开发套件进行了解和使用,但是暂时不训练…

网站建设需要学那些今天最新体育新闻足球

前言 pymsql是Python中操作MySQL的模块程序在运行时,数据都是在内存中的。当程序终止时,通常需要将数据保存在磁盘上。 安装模块 pip install PyMySql基本使用 ## 使用 connect 函数创建连接对象,此连接对象提供关闭数据库、事务回滚等操…

中国域名网站排名电商小程序名字大全

目录 1. 题目:2. 我的代码:小结: 1. 题目: 给出由小写字母组成的字符串 S,重复项删除操作会选择两个相邻且相同的字母,并删除它们。 在 S 上反复执行重复项删除操作,直到无法继续删除。 在完成…

网站开发只要在线教学的网站开发方案

嵌入式软件开发流程参照嵌入式软件的开发流程。第一步:工程建立和配置。第二步:编辑源文件。第三步:工程编译和链接。第四步:软件的调试。第五步:执行文件的固化。在整个流程中,用户首先需要建立工程并对工…

佛山顺德网站设计公司广州模板建站系统

本文所述是在windows2003上搭建,软件版本为Apache2.2.6(Win32),PHP5.2.4,MySQL5.0.45,phpMyAdmin2.11.1。Apache和MySQL需要安装,PHP和phpmyadmin都是解压配置使用。详细的安装过程就不说了,到网上搜索一大…

东莞服务公司网站建设轻栈小程序官网

([]!!) ㄟ(≥◇≤)ㄏ(&#xffe3;ε(#&#xffe3;) ∑( △ |||)︴ 一言不合发表情。。。 这节我们来做一个小菜单&#xff0c;然后判断我们选择的是啥东西&#xff0c;好了上代码&#xff1a; #include<stdio.h> #include<stdlib.h> int main() {int a1;prin…

甘肃省建设厅门户网站新手怎么做自媒体

随着电脑的应用与普及&#xff0c;电脑已经逐渐成为人们学习、工作、生活中不可缺少的工具。同时&#xff0c;电脑的价格在逐渐下降&#xff0c;很多用户开始准备选购自己的电脑。选购电脑要考虑用户的需求、价格承受能力、商家服务质量等。1、明确用户需求购买电脑之前&#x…

网站工作和网站建设管理工作商城类网站建设的服务器选择

目录 1. S7协议之布尔操作 2. S7协议之PDU读取 3 S7协议之多组读取 在电气学习的路上&#xff0c;西门子PLC应该是每个人的启蒙PLC&#xff0c;从早期的S7-300/400PLC搭建Profibus-DP网络开始接触&#xff0c;到后来的S7-200Smart PLC&#xff0c;再到现在的S7-1200/1500 PLC…

网站 数据库+1注册建筑工程公司需要什么条件

目录 前言 一、原有方案及其痛点 二、引入StarRocks 三、方案改造 3.1 架构设计 3.2 数据流程 3.3 性能指标 3.4 改造收益 前言 华米科技是一家基于云的健康服务提供商&#xff0c;每天都会有海量的埋点数据&#xff0c;以往基于HBase建设的埋点计算分析项目往往效率上…

seo网站快排网站代码编辑器

Git 是常用的去中心化源代码存储库。它是由 Linux 创建者 Linus Torvalds 创建的&#xff0c;用于管理 Linux 内核源代码。像 GitHub 这样的整个服务都是基于它的。因此&#xff0c;如果您想在 Linux 世界中进行编程或将 IBM 的 DevOps Services 与 Git 结合使用&#xff0c;那…

无锡网站建设服务有没有专门帮人做图的网站

结论 在我多番测试之后&#xff0c;才发现background-image使用svg&#xff0c;改变颜色根本做不了。 分析 当svg图片被使用成background-image&#xff0c;颜色的设置需要在svg内部才能生效。在外部CSS设置颜色样式&#xff0c;却是无效&#xff0c;这其实可以从CSS选择器得到…

恒辉建设集团网站网站开发的功能需求文档

使用流程 1.首先要清除类库是什么类型&#xff0c;不同的类库有不同的使用方式 2.寻找声明文件 JS类库一般有三类&#xff1a;全局类库、模块类库、UMD库。例如&#xff0c;jQuery是一种UMD库&#xff0c;既可以通过全局方式来引用&#xff0c;也可以模块化引用。 声明文件 当我…

百度收录好的网站排名服务好的网站制作建设

在当今数字化时代&#xff0c;视频已成为生活的重要组成部分。无论是观看电影、电视剧、综艺节目&#xff0c;还是分享个人生活、工作成果&#xff0c;视频都以其独特的魅力吸引着大众的视线。视频封面是视频内容的缩影&#xff0c;是观众对视频的第一印象。一个好的封面能吸引…

网站宣传片地州电视网站建设流程

读书笔记第一部分对应原书的第一章&#xff0c;主要介绍了Web应用程序的发展&#xff0c;功能&#xff0c;安全状况。 Web应用程序的发展历程 早期的万维网仅由Web站点构成&#xff0c;只是包含静态文档的信息库&#xff0c;随后人们发明了Web浏览器用来检索和显示那些文档&am…