39 个版本
0.14.1 | 2023 年 8 月 9 日 |
---|---|
0.14.0 | 2023 年 7 月 21 日 |
0.13.1 | 2023 年 5 月 5 日 |
0.12.1 | 2022 年 11 月 29 日 |
0.2.0 | 2020 年 11 月 7 日 |
#208 在 网络编程 中
213 每月下载量
在 17 个 包中使用 (直接使用 15 个)
355KB
5.5K SLoC
此库允许您构建在 Lunatic 上运行的 Rust 应用程序。
为什么选择在 Lunatic 上运行?
Lunatic 为所有编译为 WebAssembly 的编程语言提供了一个类似 Erlang 的运行时。它专注于创建超级轻量级进程,也称为绿色线程或其他运行时中的 go-routines。Lunatic 进程创建快速,内存占用小,调度开销低。它们是为 大规模并发 而设计的。
Lunatic 进程彼此完全隔离,它们有自己堆栈、堆甚至系统调用。如果一个进程失败,它不会影响系统的其余部分。这使得您可以创建强大且容错的应用程序。
在 lunatic 上运行的所有进程都由一个 work stealing 异步执行器进行抢占式调度和执行。这使您可以编写简单的 阻塞 代码,但运行时将确保在等待 I/O 时不会阻塞线程。
要了解更多关于 lunatic 架构的信息,请查看 运行时仓库。它用 Rust 编写 :)
示例
创建一个新的进程就像定义一个入口函数一样简单。
use lunatic::{spawn_link, Mailbox};
#[lunatic::main]
fn main(_: Mailbox<()>) {
let child = spawn_link!(@task || {
// This closure gets a new heap and stack to
// execute on, and can't access the memory of
// the parent process.
println!("Hi! I'm a process.");
});
// Wait for child to finish
let _ignore = child.result();
}
更多示例请查看 这里。
设置
要运行示例,您首先需要通过 此仓库 中的安装步骤下载 lunatic 运行时。运行时只是一个可执行文件,可在 Windows、macOS 和 Linux 上运行。如果您已经安装了 Rust,可以使用以下命令获取它
cargo install lunatic-runtime
Lunatic 应用程序需要编译成 WebAssembly,然后才能由运行时执行。Rust 对 WebAssembly 有很好的支持,你只需将 --target=wasm32-wasi
标志传递给 cargo,就可以构建一个兼容 Lunatic 的应用程序,例如
# Add the WebAssembly target
rustup target add wasm32-wasi
# Build the app
cargo build --release --target=wasm32-wasi
这将在你项目的 target/wasm32-wasi/release/
文件夹中生成一个 .wasm 文件。现在你可以通过将生成的 .wasm 文件传递给 Lunatic 来运行你的应用程序,例如
lunatic target/wasm32-wasi/release/<name>.wasm
更好的开发者体验
为了简化使用 cargo 开发、测试和运行 Lunatic 应用程序,你可以在项目中添加一个 .cargo/config.toml
文件,内容如下
[build]
target = "wasm32-wasi"
[target.wasm32-wasi]
runner = "lunatic"
现在你可以使用你熟悉的命令,例如 cargo run
,cargo test
,cargo 将自动将你的项目构建为 WebAssembly 模块并在 lunatic
中运行。
测试
Lunatic 提供了一个宏 #[lunatic::test]
,可以将你的测试转换为进程。查看 tests
文件夹以获取示例。
支持的 Lunatic 功能
一些功能通过 Rust 的标准库直接支持,例如文件系统访问(std::fs::File
)。其他功能特定于 Lunatic,例如进程创建(lunatic::Process
)。
一些在 Rust 的标准库中通常可用的功能(如 TCP,例如 std::net::TcpListener
)尚未由 WASI 标准化。因此,我们通过 这个库 提供了它们(例如 lunatic::net::TcpListener
)。一旦 WASI 支持这些功能,你将能够直接使用标准库。
目前可用功能
- 进程创建(使用此库)
- 精细的进程权限(使用此库)
- 进程间消息传递(使用此库)
- TCP 网络通信(使用此库)
- 文件系统访问
- 环境变量
- 分布式 Lunatic
注意:一些库目前在
wasm32-wasi
目标下无法编译,也不能在 Lunatic 应用程序中使用。这包括 Rust 的大多数async
生态系统。
依赖
~2-22MB
~302K SLoC