江苏网站推广网络,excel做网站,那些知名网站是外包做的,东营网站建设服务文中所有的代码都可以在 https://github.com/second-state/wasm-learning/tree/master/nodejs/hello 中找到在之前的教程中#xff0c;我们讨论了如何从 Web 浏览器中的 JavaScript 应用程序访问 WebAssembly 函数。WebAssembly 快问快答从 Rust 开始入门 WebAssembly | WebAs…文中所有的代码都可以在 https://github.com/second-state/wasm-learning/tree/master/nodejs/hello 中找到在之前的教程中我们讨论了如何从 Web 浏览器中的 JavaScript 应用程序访问 WebAssembly 函数。WebAssembly 快问快答从 Rust 开始入门 WebAssembly | WebAssembly 教程5分钟实现一个简单的 WebAssembly 应用WebAssembly 入门教程如何将字符串从JavaScript传入 Wasm/Rust | WebAssembly入门教程在《为什么说软件服务的未来必然是WebAssembly 》一文中介绍了WebAssembly 在服务端的用例尤其是人工智能、区块链和大数据应用方向。在这个例子中将展示如何将 Rust 中编写的 WebAssembly 函数集成到服务器上的 node.js 应用程序中。我们以微服务的方式提供 WebAssembly 函数。演示应用程序的结构如下主机应用程序是一个用 JavaScript 编写的 node.js web 应用程序调用 WebAssembly 函数WebAssembly 字节码程序是用 Rust 编写的由 node.js 的 web 应用程序调用。设置与前面的教程一样我们使用 wasm-pack 工具编译 Rust 源代码并生成相应的 JavaScript 模块。这种模块使得在 JavaScript 和 Rust 函数之间传递复杂的动态数据变得非常容易。想要深入了解的同学可以阅读《一文读懂 WebAssembly(WASM)中的字符串》。接下来按照下面的步骤安装Rust和wasm-pack 工具。# Install Rust$ sudo apt-get update$ sudo apt-get -y upgrade$ curl --proto https --tlsv1.2 -sSf https://sh.rustup.rs | sh$ source $HOME/.cargo/env# Install wasm-pack tools$ curl https://rustwasm.github.io/wasm-pack/installer/init.sh -sSf | shRust 写的 WebAssembly 程序在这个示例中Rust 程序在“hello” 后面追加输入字符串。创建一个新的cargo项目。注意由于这个程序是从主机应用程序调用的而不是作为独立的可执行文件运行因此我们将创建一个 hello 项目。···$ cargo new --lib hello$ cd hello编辑 Cargo.toml 文件添加 [lib] 部分. 它告诉编译器在哪能找到库的源代码以及如何生成字节码输出。同时我们也需要在这添加 wasm-bindgen 的依赖项。这是使用 wasm-pack的用途生成绑定 JavaScript 的 rust webassembly程序[lib]name hello_libpath src/lib.rscrate-type [cdylib][dependencies]wasm-bindgen 0.2.50下面是Rust 程序 src/lib.rs 的内容。实际上我们可以在这个库文件中定义多个外部函数并且所有这些函数都可以通过 WebAssembly 在主机 JavaScript 应用程序中使用。use wasm_bindgen::prelude::*;#[wasm_bindgen]pub fn say(s: String) - String { let r String::from(hello ); return r s;}接下来您可以将 Rust 源代码编译成 WebAssembly 字节码并为 node.js 主机环境生成相应的 JavaScript 模块。$ wasm-pack build --target nodejs结果是以下三个文件. .wasm 文件是 WebAssembly 字节码程序; .js 文件用于 JavaScript 模块;Pkg / hello lib bg. wasmPkg / hello lib bg. jsPkg / hello lib.jsNode.Js 主机应用程序接下来让我们为 node.js web 应用程序创建一个节点文件夹复制生成的 JavaScript 模块文件。$mkdir node$cp pkg / hello lib bg. wasm node /$cp pkg / hello lib bg. js node /$cp pkg / hello lib.js node /使用生成的 hello_lib.js 在 JavaScript 中调用 WebAssembly 函数是非常容易的。下面是节点应用程序 app.js。 它只是从生成的模块中导入 say () 函数。 节点应用程序从传入的 httpget 请求中获取 name 参数并用“ hello name”进行响应。const { say } require(./hello_lib.js);const http require(http);const url require(url);const hostname 127.0.0.1;const port 8080;const server http.createServer((req, res) { const queryObject url.parse(req.url,true).query; res.statusCode 200; res.setHeader(Content-Type, text/plain); res.end(say(queryObject[name]));});server.listen(port, hostname, () { console.log(Server running at http://${hostname}:${port}/);});按照以下方式启动 node.js 应用服务器。$ node app.jsServer running at http://127.0.0.1:8080/然后就可以测试了。$ curl http://127.0.0.1:8080/?nameWasmhello Wasm下一步是什么呢现在 Web 服务可以将计算量大、不安全和新颖的硬件访问任务转移到 WebAssembly 中。 我相信将有更多用例将会出现。 敬请期待