workers-rs:用 Rust 写 Cloudflare Workers

发布时间:2026/6/27 6:16:44
workers-rs:用 Rust 写 Cloudflare Workers 文章目录workers-rs用 Rust 写 Cloudflare Workers能做什么和 JavaScript 版本有什么区别怎么上手有限制吗适合什么场景workers-rs用 Rust 写 Cloudflare Workers以前想写 Cloudflare Workers基本只能用 JavaScript 或 TypeScript。这对 Rust 开发者来说挺别扭的明明 Rust 性能更好、更安全却没法直接用。cloudflare/workers-rs 这个项目就是来解决这个问题的。它是 Cloudflare 官方维护的 Rust 绑定库让你可以用纯 Rust 写 Workers编译成 WebAssembly 部署到 Cloudflare 边缘网络。目前 Star 数 3500 多不算特别高但作为 Cloudflare 官方项目质量是有保障的。能做什么这个项目覆盖了 Workers 平台的主要能力HTTP 请求处理用#[event(fetch)]宏标记入口函数接收Request、Env、Context三个参数返回Response。写法和 JavaScript 版本很像只是换成了 Rust 语法。KV 存储通过ctx.kv(NAMESPACE)访问 Cloudflare KV支持读写 JSON 数据。做配置存储、缓存之类的场景够用。Durable Objects有状态的对象支持 SQLite 存储。适合做聊天室、计数器、游戏房间这类需要持久化状态的功能。消息队列支持 Queue 消费和生产可以做异步任务处理。不过这个功能还在 beta 阶段需要手动开启 feature flag。RPC 调用实验性功能支持 Workers 之间的远程过程调用。目前还不太完善但基本的调用场景已经能跑通。和 JavaScript 版本有什么区别最大的区别是类型系统。Rust 的所有权和生命周期机制让你在编译阶段就能发现大部分 bug不用等到运行时才报错。对于边缘计算这种调试不便的场景这个优势很明显。另一个是性能。WebAssembly 的执行效率比 JavaScript 高特别是计算密集的任务。虽然 Workers 本身有 CPU 时间限制但同样的逻辑用 Rust 写通常能跑得更快。还有就是生态。Rust 的 crate 生态很成熟很多库可以直接用只要能编译到wasm32-unknown-unknown目标。像serde、reqwest这些常用库都没问题。怎么上手用cargo generate从模板开始cargo generate cloudflare/workers-rs模板会生成基本的项目结构你只需要改src/lib.rs。本地开发用npx wrangler dev部署用npx wrangler deploy。整个流程和 JavaScript 版本基本一样只是构建环节多了编译 WebAssembly 的步骤。如果你想用axum这类 Web 框架项目提供了httpfeature flag可以把 Workers 的请求类型转换成标准的http::Request和http::Response这样就能直接复用现有的框架代码。有限制吗有。首先不是所有 Rust 库都能用。依赖线程、文件系统、网络 socket 的库在 WebAssembly 环境下跑不了。Tokio 和 async_std 这类异步运行时也不支持不过 async/await 语法本身是可以用的。其次bundle 大小有限制。Workers 对脚本大小有上限如果依赖太多编译出来的.wasm文件可能超限。需要手动优化依赖或者参考 WebAssembly 的代码体积优化指南。最后调试体验不如本地开发。虽然有 Miniflare 可以做本地测试但调试 WebAssembly 的工具链还不够成熟。适合什么场景如果你已经在用 Cloudflare Workers又对 Rust 有经验这个项目值得试试。特别是做 API 网关、边缘缓存、轻量级计算这类场景Rust 的性能优势能体现出来。如果你是 Rust 新手建议先熟悉 Rust 基础再来。Workers 的开发模式和传统后端不太一样同时学两样东西容易混乱。总的来说这是个实用的工具解决了 Rust 开发者在 Cloudflare 平台上的痛点。虽然有些限制但对于合适的场景来说是个不错的选择。说这是个实用的工具解决了 Rust 开发者在 Cloudflare 平台上的痛点。虽然有些限制但对于合适的场景来说是个不错的选择。