5个版本
0.5.2 | 2020年2月7日 |
---|---|
0.5.1 | 2020年2月7日 |
0.5.0 | 2020年2月7日 |
0.4.1 | 2019年11月18日 |
0.4.0 | 2019年11月18日 |
#1387 in WebAssembly
23KB
231 代码行
将Yew工作者编译为wasm32-wasi
此库允许编译和部署以wasm32-wasi为目标的语言yew工作者。它允许编译和运行类似于POSIX的应用程序,并具有访问定时器、随机数和模拟文件系统(memfs)的能力。
在某些操作中,wasi工作者比 wasm-bindgen或stdweb 运行得更快。
示例用法
在你的 Cargo.toml
wasi-worker-yew = "0.4"
在 src/bin/worker.rs
use wasi_worker_yew::{ThreadedWASI, WASIAgent};
use yew::agent::*;
use wasi_worker::{FileOptions, ServiceOptions, ServiceWorker};
pub struct MyAgent;
impl Agent for MyAgent {
type Reach = Public;
type Message = String;
type Input = String;
type Output = String;
fn create(_link: AgentLink<Self>) -> Self { MyAgent { } }
fn update(&mut self, _msg: Self::Message) { /* ... */ }
fn handle(&mut self, _msg: Self::Input, _who: HandlerId) { /* */ }
fn name_of_resource() -> &'static str {
"worker.js"
}
};
fn main() {
let opt = ServiceOptions::default().with_cleanup();
ServiceWorker::initialize(opt)
.expect("ServiceWorker::initialize");
ServiceWorker::set_message_handler(Box::new(WASIAgent::<MyAgent>::new()));
}
部署
为了简化构建和部署,你可以使用 wasi-worker-cli
cargo install wasi-worker-cli --force
部署脚本将编译和优化的工作者目标以及JS粘合代码放置在 ./dist
wasiworker deploy
依赖项
~4.5–7MB
~137K SLoC