#wasi #worker #yew #agent

wasi-worker-yew

针对yew的WASM/WASI浏览器服务工作者(Agent

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

MIT/Apache

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