Rust 学习,与 node.js 交互

使用rust调用c++静态库并编译nodejs包 在项目上经常要用到身份证阅读器、护照阅读仪、指纹仪等各种品牌硬件,假如每套系统的都做集成开发那代码的维护成本将变得很高,为此采用rust来调用厂家提供的sdkc++开发包并封装成nodejs包,用fastify来开发成webapi独立的服务形式。如果一个package同时拥有src/main.rs和src/lib.rs,那就意味着它包含两个包库包和二进制包,这两个包名也都是test_math——都与package同名。唯一库包src/lib.rs。三、package.json。... 阅读详情

1、背景

近期,参与了一个活动:学 Rust,免费拿树莓派。

主要内容为开发应用,在 node.js 中调用 Rust 函数。

实际上我认为在很多地方都能用上 Rust,鉴于活动要求,或许 node.js 是一个不错的切入点,毕竟提供了模版,应该会更快熟悉。

难点就在于这两,我都没有相关的知识,不过这挑战我接受,学呗!
工作党,所以就每天挤出点时间来进行了。

2、配置环境

配置环境算是每个开发者必须跨过的第一道门槛了。

根据教程的环境要求,需要使用 linux 系统。

在我的5年老笔记本联想电脑上,是有双系统安装 ubuntu 的,但编译操作需要与外网的连通性,网络问题成为了最大的瓶颈。
搜了一圈,ubuntu 的代理工具基本上是要自己配置,多翻代理操作下来,终端能与某些外网连通了,但还是会卡在 ssvmup build,使用 docker 无解后,又转向了自己手工搭建环境,但会报 permission denied,加上 sudo 也毫无作用,连 chmod 777 也未果。

后来觉得还是用 docker 会比较靠谱,毕竟是别人已经实践过的环境,所以首要目标就是解决网络问题。
然后就想到了使用虚拟机来安装 ubuntu ,网络问题通过桥接主机的代理来解决,实验了一番,终于把 hello world 模版跑成功了[泪目]。

相关的 docker 镜像有如下三个:

ssvm-nodejs:v1
secondstate/ssvm-nodejs-starter:v1
registry.cn-hangzhou.aliyuncs.com/chirsz/ssvm-nodejs:latest

第三个是评论区网友整的,最终我采用第二个镜像进行操作。

3、熟悉代码

虽然能跑了,但实际的代码还不清楚其原理,所以要先熟悉代码。
对于学习代码,我主要采用的是先了解相关工具,再看大致代码。

  • the cargo config file

The Cargo.toml file shows the dependencies.
Note the dependency for wasm-bindgen,
which is required for invoking these Rust functions from JavaScript.
The dependency for serde and serde-json allows us to work with JSON strings to represent complex data types.

  • wasm-pack

工具 wasm-pack,它会帮助我们把我们的代码编译成 WebAssembly 并制造出正确的 npm 包。

  • SSVM

The Second State VM (SSVM) is a high-performance WebAssembly runtime optimized for server-side applications.
This project provides support for accessing SSVM as a Node.js addon.
It allows Node.js applications to call WebAssembly functions written in Rust or other high-performance languages.

  • ssvmup

The ssvmup uses wasm-bindgen to automatically generate the “glue” code between JavaScript and Rust source code
so that they can communicate using their native data types.
Without it, the function arguments and return values would be limited to very simple types
(i.e., 32-bit integers) supported natively by WebAssembly.
用#[wasm_bindgen]注释每个函数。加过注释后,
ssvmup 在构建 Rust 函数时,知道生成正确的 JavaScript 到 Rust 接口。
生成的文件保存在 pkg/ 目录, .wasm 文件是 WebAssembly 字节码程序,.js文件用于JavaScript模块。

  • Wasm

Wasm is a machine-close, platform-independent, low-level, assembly-like language (Reiser and Bläser, 2017),
and is the first mainstream programming language to implement formal semantics,
right from the start (Rossberg et al., 2018).

  • Dockerfile

Dockerfile 是一个文本文件,其内包含了一条条的 指令(Instruction),
每一条指令构建一层,因此每一条指令的内容,就是描述该层应当如何构建。

4、尝试玩耍

Rust 主要用在一些需要高性能效果的地方,我没有学过 node.js 和 前端的内容,只能简单地做个 demo,把一些吃紧的函数操作用 Rust 来进行替换。
这个 demo 是一个简单的裁剪图片的前端页面,当点击页面按钮,就裁剪图片,然后显示裁剪后的图片,每点击一次,就裁剪一次。

运行步骤

Must have Node.js installed with the following packages.

$ npm i ssvm sync-request better-sqlite3
$ npm i -g ssvmup
$ npm i -g wasm-pack

The Rust functions that make Node.js calls are in the src/lib.rs file.

$ wasm-pack build --target nodejs

运行服务

$ node node/app.js

打开 public/show_pic.html 即可运行
页面展示
点击按钮即可开始对 cat.png 的修剪,结果保存到 test.png
运行过程

5、总结

在这里,Rust 主要充当了一个优化器的角色,把一些性能要求高的操作编成 Wasm,供其他语言进行操作。
在网上也看到很多有意思的操作,像人工智能、网络交互等场景都可以用上。
整个操作过程,遇到最多的问题是环境问题和网络问题,主要是使用的这些工具需要网络的支持,还有 ubuntu 的权限限制。

参考链接

入门文档:在 Node.js 应用中调用 Rust 函数
Learning WebAssembly, Rust, and Node.js
ubuntu 的权限问题解决

CodeGraph:Rust+Node.js 构建的轻量级代码关系图谱工具 代码关系图谱是一种将源码中模块、函数、API 等实体及其调用、导入、依赖等语义连接可视化呈现的技术,其核心原理是基于 AST 静态分析提取结构化边关系,而非运行时追踪或类型检查。相比传统 UML 工具或 LSP 依赖分析,它以低开销、离线可用、零侵入为技术价值,特别适用于 TypeScript/Node.js 大型项目架构理解、新人上手、重构验证与 CI 架构健康度审计。codegraph 正是这一理念的工程落地——它用 Rust 实现高性能 AST 解析内核,保障毫秒级响应与跨平台稳定性;同时通过 npm 阅读详情

相关推荐

Rust与Node.js/前端集成:高性能Web组件开发实践

WebAssembly(WASM)和Node-API(N-API)是现代Web开发中实现高性能计算的关键技术。WASM允许将C++、Rust等语言编译成可在浏览器中安全高效运行的字节码,而N-API则为Node.js提供了稳定的原生插件接口。这些技术的核心原理在于通过跨语言调用和内存共享机制,将高性能计算任务从JavaScript主线程中剥离,从而避免阻塞事件循环,提升应用响应速度。其技术价值在于能够将Rust等系统级语言的内存安全、零成本抽象和高并发特性引入Web生态,有效解决JavaScript在处理计

weixin_30258901的博客 657

Rust: 基于 napi-rs 开发 Node.js 原生模块

参照 napi-rs 文档 demo 走通基于 Rust 语言开发 Node.js 原生模块开发流程

超悠閒的博客 3129

Agentic OS:Rust+Node.js构建的多智能体协作运行时框架

多智能体系统(Multi-Agent System)正从概念验证走向工程落地,其核心挑战在于任务编排、进程管理、跨Agent通信与容错机制。传统LLM Agent开发常陷入单点能力强、系统协同弱的困境——缺乏类似操作系统内核的统一运行时支撑。Agentic OS应运而生,它并非替代OS的操作系统,而是基于Rust实现高可靠Runtime内核,配合Node.js构建灵活业务层,通过JSON-RPC协议实现轻量级IPC,支持热更新、资源隔离与状态快照。该架构显著降低LangChain/AutoGen等框架的工程

aoe41606的博客 393

160、Rust与Node.js互操作:性能与安全的桥梁

本文介绍了如何在Node.js中运行Rust代码,通过使用neon等库实现Rust与Node.js的互操作。我们探讨了Rust在性能、安全性以及系统编程方面的优势,并提供了实用的技巧和案例。通过Rust与Node.js的互操作,开发者可以充分利用两者的优势,提高应用的性能和安全性,构建出更加丰富和强大的网络应用。

silenceallat的博客 3144

使用 Rust 编写 Node.js 模块的简单方法

节点绑定使用惯用的 Rust 编写原生 Node.js 模块的简单方法特征简单:只需编写惯用的 Rust 代码,node-bindgen 负责生成 Node.js FFI 包装器代码。安全:基于 Rust 类型自动检查 Node.js 参数。异步:支持异步 Rust。异步代码被翻译成 Node.js 承诺。类:可以使用 Node.js 类访问 Rust 结构。Stream:使用 Rust 实现 Node.js 流N-API:使用 Node.js N-API,这意味着您不必重新编译您的模块。与 Node.js 版本的兼容性本项目使用 Node N-API 的 v7。请参阅以下兼容性矩阵。支持以下操作系统:Linux苹果系统视窗为什么是节点绑定?编写原生 node-js 需要大量样板代码。Node-bindgen 从 Rust 代码生成外部“C”胶水代码,包括本地模块注册。node-bindgen 使编写 node-js 模块变得简单而有趣。入门命令行安装安装 nj-cli 命令行,它将用于生成本机库。cargo install nj-cli这是一个时间步。配置 Cargo.toml向项目

node-bindgen-使用Rust生成nodejs模块的简单方法-Rust开发

node-bindgen使用惯用的Rust功能编写本机Node.js模块的简便方法简单:只需编写惯用的Rust代码,node-bindgen负责gen-bindgengen使用惯用的Rust功能编写本机Node.js模块的简便方法:编写惯用的Rust代码,node-bindgen负责生成Node.js FFI包装器代码。 安全:Node.js参数根据Rust类型自动检查。 异步:支持异步Rust。 异步代码被转换为Node.js承诺。 类:可以使用Node.js类访问Rust结构。 流:使用Rust N-API实现Node.js流:使用Node.js N-API,这意味着您

前端视角对Rust的浅析

概述本文将从 Rust 的历史,前端的使用场景和业界使用案例一步步带你走进 Rust的世界。并且通过一些简单的例子,了解 Rust 如何应用到前端,提高前端的生产效率。Rust简史2006年,软件开发者Graydon Hoare在Mozilla工作期间,开始了Rust作为一个个人项目。根据他在麻省理工技术评论的一次采访,Rust的灵感来自于Hoare公寓楼里一个坏掉的电梯。电梯操作系统的软件崩溃了...

大转转FE 1249

基于Arduino与Velostat的智能鞋垫:DIY足底压力监测系统全解析

压力传感器是物联网和健康监测领域的基础元件,其核心原理是将物理压力转换为可测量的电信号。通过压阻效应,材料的电阻值随压力变化,从而实现压力感知。这项技术为低成本、定制化的健康监测方案提供了可能,尤其在运动分析和康复训练中具有重要价值。本文聚焦于利用Velostat压敏材料和Arduino平台,详细解析如何从传感器制作、信号调理到无线数据传输,构建一套完整的足底压力监测系统。文中深入探讨了传感器阵列构建、信号滤波等关键技术,并针对常见问题提供了实用的解决方案,为创客和开发者实现可穿戴健康监测设备提供了清晰的工

weixin_32818781的博客 400

CLI 工具深度解析系列

本系列包含 10 篇关于主流 CLI(命令行界面)开发框架的深度分析文章。

果汁华的博客 410

RAG 赋能客服机器人:多轮对话与精准回复

在人工智能技术飞速发展的今天,客服机器人已成为企业提升服务效率的重要工具。然而,传统客服系统在多轮对话连贯性和精准回复能力上存在明显短板。检索增强生成(Retrieval-Augmented Generation, RAG)技术通过结合大语言模型(LLM)与外部知识库,为解决这一问题提供了创新路径。本文将深入探讨 RAG 在客服机器人中的应用,重点分析其如何实现多轮对话与精准回复,并结合实际案例与技术框架展开讨论。

shuizhudan223的博客 2142

Ubuntu24.04/20.04设置网络共享文件夹

Ubuntu20.04利用向日葵远程控制时,不能传输文件。使用linux版本QQ来传输是可以的,不过linuxqq功能真的很弱。因此,打算在Ubuntu系统中建立一个共享文件夹,可在局域网中访问。 1、新建共享文件夹 获取root权限,或者登陆root账户。可在/home文件夹(或其它文件夹)下新建一个文件夹,如share。 右击文件夹,选择“本地网络共享”菜单。按下图设置。 点击确定。如果系统已经安装了samba服务器,就可以进入第3步。如果没有,会提示安装,按提示安装,可能会出错,可进.

willhu2008的专栏 2万+

Rust与WebAssembly深度实战——将高性能Rust代码运行在浏览器与Node.js

本文介绍了Rust与WebAssembly(Wasm)的深度实战,主要内容包括: 学习目标与重点 掌握WebAssembly基础概念和性能优势 学习Rust到Wasm的编译工具链(wasm-pack、cargo-web) 实现Rust与JavaScript的双向交互 开发高性能Wasm应用(图像处理、加密等) 优化和部署Wasm模块 WebAssembly基础 定义:高性能、可移植的字节码格式 性能:执行速度接近原生代码,比JavaScript快10-100倍 使用场景:浏览器端高性能任务、Node.js计

编程世界如山海,探索不止。 1万+

终端以太网接入Internet实验

实验过程: 1.布局 2.连接 3.配置Route0和Route1 4.配置RIP 5.static: 6.查看Route0,Route1的路由表: 7.完成PC2和server0 IP地址,子网掩码和默认网关地址的配置: 8.命令行: 9.启动PC0桌面下的PPPoe宽带连接程序: 10.启动PC1桌面下的PPPoe宽带连接程序: 11.验证PC0和PC2的ICMP报文传输过程 12.验证PC1和server0的ICMP报文传输过程 关键命令说明

chaojidagouzi的博客 4082

终极指南:如何在Rust与JavaScript间实现BigInt高效交互

napi-rs是一个通过Node-API在Rust中构建编译型Node.js插件的框架,它为Rust与JavaScript间的BigInt高效交互提供了强大支持。本文将详细介绍如何利用napi-rs实现两者间BigInt的无缝协作,帮助开发者轻松处理大整数运算场景。 ## 为什么选择napi-rs进行BigInt交互? 在现代应用开发中,处理大整数(超过Number类型精度范围)的需求日益增多

gitblog_00212的博客 724

【数据同化第一期】基本概念介绍

【数据同化第一期】基本概念介绍

WW、forever的博客 1904

即插即用系列(代码实践) | CVPR 2025 WPFormer:小波与原型增强Transformer——表面缺陷检测SOTA,专治弱缺陷与杂乱背景

摘要:本文提出了一种基于小波变换和原型增强的Transformer模型(WPFormer),用于像素级表面缺陷检测。该模型针对工业场景中微弱缺陷难以识别和杂乱背景干扰严重的问题,创新性地将小波变换引入Transformer的注意力机制,通过频域信息分离噪声与边缘特征,同时利用原型向量引导查询,实现了更精准的缺陷定位。核心模块包括小波增强交叉注意力(WCA)和原型引导交叉注意力(PCA),适用于工业缺陷检测、伪装目标检测和医学图像分割等任务。代码已开源,支持即插即用集成到现有框架中。

分享顶会顶刊论文即插即用模块 301

Neon项目深度解析:Rust与Node.js的完美融合

Neon项目深度解析:Rust与Node.js的完美融合 【免费下载链接】neon Rust bindings for writing safe and fast native Node.js modules. 项目地址: htt...

gitblog_00238的博客 757

实时数字人SoulX-FlashHead 音视频不对齐解决

【代码】实时数字人SoulX-FlashHead 音视频不对齐解决。

jacke121的专栏 200

你还在用C++封装?Rust与Node.js高性能集成的3种前沿方案

掌握Rust的互操作,高效集成Node.js与Rust提升性能。本文详解FFI、N-API和WASM三种前沿方案,适用于高并发、计算密集型场景,显著降低延迟。构建跨语言桥梁,实现安全高效的数据交换,值得收藏。

InstrWander的博客 878

【树莓派安装Homeassistant及基本配置】

时隔一年,我又重新开始玩Homeassistant,发现其中奥妙无穷,惊喜不断。在我浅薄的认知中要学好嵌入式,必须玩过Homeassistant,并且玩出自己的名堂!因为这是最贴切实际的生活应用没有之一,每月更新使得唯有活水来;拥抱大千使得永葆青春的活力;鬼斧神工的操作精彩纷呈,可以堪称软件与硬件的完美落地!

vor234的博客 1万+

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

实测AIri后端架构:Node.js与Rust性能对决,谁是AI VTuber的最佳引擎?

AIri作为基于LLM驱动的Live2D/VRM虚拟角色项目,其核心体验依赖于实时语音交互与动画渲染的无缝衔接。后端架构采用Node.js与Rust双引擎设计,前者负责业务逻辑编排,后者聚焦高性能计算任务。本文将从技术选型、性能表现和实际应用场景三个维度,深入解析这两种语言如何协作支撑AI VTuber的流畅运行。 ## 架构设计:双引擎驱动的技术选型 AIri的后端架构呈现"上层灵活编排+底

gitblog_00609的博客 1146

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

9.2 在 Node.js 中使用 Rust 模块:高性能原生扩展

本文介绍了如何在 Node.js 中使用 Rust 编写高性能原生扩展模块。通过 napi-rs 工具链,可以轻松地将 Rust 函数暴露给 JavaScript 调用,实现 CPU 密集型任务的高效执行。文章以构建 blake3-hasher 哈希计算模块为例,展示了从环境准备、Rust 核心逻辑编写到构建测试的完整流程。napi-rs 提供了简洁的 API、自动类型转换和安全错误处理,显著降低了开发原生扩展的复杂度。该方法特别适用于图像处理、密码学计算等需要高性能的场景。

yonggeit的博客 2978

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

WebAssembly联调实践:Rust计算模块与Node.js后端的性能对比

通过本文的实践,我们可以看到:Rust + WebAssembly 可以显著提升 Node.js 后端的计算性能。通过合理的内存管理和数据传输优化,性能优势可以最大化。?未来,更多计算密集型任务将倾向于采用 WASM 模块化开发,实现前后端性能统一。??总之,Rust + WebAssembly 在 Node.js 后端的联调实践不仅带来了性能提升,也让开发者在高性能计算和易用性之间取得了良好平衡。无论是大数据处理、图像计算还是科学计算,这种组合都是值得尝试的方案。??

lxpcit的博客 969

从JavaScript到Rust:TypeScript开发者必须掌握的跨语言交互秘籍

掌握TypeScript与Rust交互核心技术,提升前端性能与安全性。详解WASM、FFI在Web应用中的实践方法,支持高性能计算与原生功能调用,实现无缝跨语言协作。开发者进阶利器,值得收藏。

LearnPlex的博客 786

Node.js 与 Java 桥接项目教程

Node.js 与 Java 桥接项目教程 1. 项目介绍 node-java-bridge 是一个用于在 Node.js 和 Java 之间建立桥接的开源项目。该项目使用 Rust 编写,并通过 napi-rs 提供了一个快速且内存安全的接口,使得 Node.js 程序能够与 Java API 进行交互。与传统的 Node.js 和 Java 桥接工具不同,node-java-bridge 的二...

gitblog_00916的博客 963

2023年Rust WebAssembly资源精选:官方手册与进阶学习路径

Rust WebAssembly是将Rust语言编译为WebAssembly格式的技术,它结合了Rust的安全性和高性能与WebAssembly的跨平台能力,为Web开发带来了全新的可能性。本文将为你精选2023年Rust WebAssembly的官方手册与进阶学习路径,帮助你快速掌握这一技术。 ## 一、Rust WebAssembly官方手册 ### 1.1 《Rust and WebAs

gitblog_00487的博客 1000
上一篇: QA systems(斯坦福问答系统)
下一篇: python 执行 shell 命令卡死
流左沙
博客等级 码龄11年 46粉丝 55原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值