【问题标题】:Can wasm use sysinfo dependency?wasm 可以使用 sysinfo 依赖吗?
【发布时间】:2021-04-13 11:01:39
【问题描述】:

我希望能够编写一个非常小的 Rust 包并将其编译为wasm,从而能够读取系统 RAM/CPU 资源。

这是因为 PC 的浏览器保护吗?

我可以使用依赖 sysinfo 依赖并在 Rust 中运行它没有问题,但是一旦编译成 wasm,这些值就不再可用。他们只是以0 的身份返回。

use sysinfo::SystemExt;
use wasm_bindgen::prelude::*;

#[wasm_bindgen]
extern "C" {
    #[wasm_bindgen(js_namespace = console)]
    fn log(s: String);
}

#[wasm_bindgen]
pub fn specs() {
    let mut system = sysinfo::System::new();

    // First we update all information of our system struct.
    system.refresh_all();

    // And finally the RAM:
    let total_ram = system.get_total_memory();
    let used_ram = system.get_used_memory();
    let available_ram = total_ram - used_ram;

    log(format!("Total memory: {} kB", total_ram)); <--- Work in Rust but return 0 in wasm
    log(format!("Used memory: {} kB", used_ram)); <--- Work in Rust but return 0 in wasm
    log(format!("Available memory: {} kB", available_ram)); <--- Work in Rust but return 0 in wasm
}

【问题讨论】:

  • WASM 对系统的访问仅限于运行时提供的任何内容。通常,这意味着它无法访问在浏览器中运行的 Javascript 无法访问的任何内容。您可以查看 web_sysjs_sys 之类的 crate,了解 WASM 可用的内容。直接回答您的问题:不,浏览器不提供系统信息,即使提供了,sysinfo crate 也不兼容浏览器环境。

标签: javascript rust webassembly rust-cargo wasm-bindgen


【解决方案1】:

sysinfo 不支持 Web 程序集。这会触发一个返回 0s 的虚拟实现。

可以在这里看到:https://github.com/GuillaumeGomez/sysinfo/blob/6315474256150e5f6e23bc80c0fd922b40998a58/src/unknown/system.rs#L96

关于不久的将来,我不希望看到对 Web 汇编的支持。至少对我来说,我也不清楚这些值的含义应该是什么。这些值是指整个系统,还是仅指 Web Assembly 可用的内存?

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-01-23
    • 2016-07-25
    • 1970-01-01
    • 2015-06-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-09-30
    相关资源
    最近更新 更多