3个版本 (稳定)

1.1.0 2023年3月23日
1.0.0 2022年2月10日
1.0.0-alpha.02022年1月24日

#1065WebAssembly

Download history 2/week @ 2024-03-13 13/week @ 2024-03-27 27/week @ 2024-04-03 55/week @ 2024-04-17 16/week @ 2024-04-24

每月192次下载

Apache-2.0

21KB
461

waPC Pool

crates.io license

此crate实现了一个waPC主机的多线程池。您通常会使用HostPoolBuilder来创建一个HostPool,并使用.call()来启动请求,就像在标准的WapcHost上一样。

HostPool内置了基本弹性。指定开始时要启动的最少线程数和增长到的最大线程数。在启动新工作者之前给池子一个max_wait持续时间,并设置一个max_idle持续时间来自动杀死高于最小大小的工作者。

use std::fs::read;

use wapc::WapcHost;
use wapc_codec::messagepack::{deserialize, serialize};
use wapc_pool::HostPoolBuilder;

#[tokio::main]
async fn main() -> anyhow::Result<()> {
  let file = read("../../wasm/crates/wapc-guest-test/build/wapc_guest_test.wasm")?;

  let engine = wasmtime_provider::WasmtimeEngineProvider::new(&file, None)?;

  let pool = HostPoolBuilder::new()
    .name("pool example")
    .factory(move || {
      let engine = engine.clone();
      WapcHost::new(Box::new(engine), None).unwrap()
    })
    .max_threads(5)
    .build();

  let bytes = pool.call("echo", serialize("Hello!")?).await?;

  let result: String = deserialize(&bytes)?;

  println!("Wasm module returned: {}", result);

  Ok(())
}

依赖关系

~4–11MB
~99K SLoC