写点什么

如何在 Cloudflare Workers 上部署 Rust 生成的 WASM

2019 年 4 月 09 日

如何在Cloudflare Workers上部署Rust生成的WASM

Cloudflare最近开源了 Wrangler。这是一组 CLI 工具,用于构建、预览和发布 Cloudfare Workers,这些 Workers 用 Rust 语言编写并编译到 WebAssembly。


Wrangler 的目标是为开发人员提供端到端的体验,使他们能够在 Rust 中编写自己的无服务器功能,并在将其转换为 WebAssembly 后,在 Cloudflare Workers 上部署和运行这些功能。WebAssembly 编译步骤隐藏在 Wrangler CLI 后面。


要尝试使用 Wrangler,可以使用 cargo 执行 cargo install Wrangler 安装它。Wrangler 生成的工程的一般结构包括一个存储 Rust 代码的 src 目录,一个包含一个 worker.js 的 Worker 目录(可以从中提取 Rust 生成的代码)和几个元数据文件。Wrangler 有三个主要命令:build(构建)、preview(预览)和 publish(发布)。build 命令将所有 Rust 代码编译到 WebAssembly,而 preview 命令将允许你在 Cloudflare 基础设施上运行函数。不过,目前还不能在本地预览函数,但至少在 Cloudflare 基础设施上预览函数不需要 Cloudflare 账户。


你可以像往常一样编写 Rust 代码:你可以在你的 Cargo.toml 文件中引入任何指定它的外部依赖项。使用 wasm_bindgen 通过启用字符串、对象、类等来改进 wasm 和 JS 之间的通信。例如,你可以写这样一个简单的 Rust 文件:


use wasm_bindgen::prelude::*;
extern "C" { fn alert(s: &str);}
#[wasm_bindgen]pub fn greet(name: &str) -> String{ &format!("Hello, {}!", name);}
复制代码


该代码可以使用以下语法导入并在 worker.js 文件中执行:


const { greet } = wasm_bindgen;await wasm_bindgen(wasm)const output = greet('Worker')
复制代码


Cloudflare 计划向 Wrangler 添加更多的命令,包括对 linting、测试、基准测试和大小分析的支持。


Cloudflare Workers 是用 JavaScript 编写的无服务器函数,可以在分布世界各地的Cloudflare边缘节点运行。Cloudflare 表示,由于它们的边缘节点与终端用户非常接近,Workers 可以通过减少网络延迟来提高性能。Cloudflare Workers 使用 V8 JavaScript 引擎运行代码,但他们不使用 Node.js,而是依靠他们自己实现的一些 API 来提高效率和安全性。


查看英文原文链接:Deploying Rust-Generated WASM on Cloudflare Serverless Workers


2019 年 4 月 09 日 08:005945
用户头像

发布了 123 篇内容, 共 34.2 次阅读, 收获喜欢 144 次。

关注

评论

发布
暂无评论
发现更多内容

通证经济=区块链技术+商业模式

CECBC区块链专委会

商业模式 区块链技术 Token 通证经济

迎接一次重大的人生升级,让优秀的你,成为大学顶尖生。

叶小鍵

单例模式与组合模式总结与练习

单例模式 极客大学架构师训练营 组合模式 第三章作业

了解 Java 内存模型

陈皮

JMM

week3 作业

雪涛公子

week3:组合设计模式和单例

Geek_36d3e5

week3-学习心得

Geek_36d3e5

了解 Java 架构

陈皮

面试急转弯:List如何一边遍历,一边删除?

Java小咖秀

架构师训练营第三周总结

hiqian

Week3 作业

Shawn

刘华:想入门软件系统架构设计,看这篇就够了

刘华Kenneth

架构 架构师 故障 容灾 灾备

LeetCode | 5. Longest Common Prefix 最长公共前缀

Puran

Python C# 算法 LeetCode

本地缓存高性能之王Caffeine

java金融

Java Guava Cache Caffeine 本地缓存 谷歌本地缓存

LeetCode 2. Add Two Numbers

liu_liu

数据结构 算法 链表 LeetCode

从印度兵力分布聊聊Mybatis中#和$的区别

程序那些事

Java sql mybatis 印度兵力

孩子教育

王进行

教育 孩子

设计模式作业

qihuajun

ARTS Week4

时之虫

ARTS 打卡计划

架构师训练营总结-20200621

caibird1984

极客大学架构师训练营

LeetCode 300. Longest Increasing Subsequence

liu_liu

LeetCode

依赖倒置原则

任小龙

springboot + rabbitmq 做智能家居,我也没想到会这么简单

程序员内点事

Java Spring Boot RabbitMQ 智能设备

接口隔离原则-Cache类优化

yupi

ARTS|Week 4 Product, Leadership, and SOLID

Puran

设计模式 LeetCode ARTS活动 Leadership

跨平台数据库管理神器DataGrip,用上就爱不释手

飞哥

数据库 JetBrains datagrip

区块链助力新基建

CECBC区块链专委会

区块链技术 联盟链 公链 底层技术

云计算产品的竞争力

韩超

云计算 k8s 公有云 私有云

架构师训练营第三周作业

张明森

极客大学架构师训练营

ArrayList的删除姿势你都知道了吗

java金融

Java 后端 ArrayList 循环删除 ModificationException

一些有用的工具、开源项目收集

陈皮

微服务架构下如何保证事务的一致性

微服务架构下如何保证事务的一致性

如何在Cloudflare Workers上部署Rust生成的WASM-InfoQ