#nodejs #node #bridge #js #npm-package #script #achieve

node_bridge

一个简单的Rust脚本,用于实现node.js和Rust之间的桥梁。配合npm包rustlang-bridge使用。

6个版本 (3个稳定版)

1.0.2 2023年4月22日
0.1.2 2023年4月8日
0.1.1 2023年4月8日
0.1.0 2023年4月8日

#18 in #npm-package

每月下载 28次

MIT 协议

18KB
253

Node Bridge

一个简单的Rust脚本,用于实现node.js和Rust之间的桥梁。配合npm包rustlang-bridge使用。每个Rust程序只能初始化一个桥梁。但node.js可以有多个桥梁。

安装

在Cargo.toml的[dependencies]下添加以下行

node_bridge = "1.0.2"

Node.js安装

$ npm install rustlang-bridge

用法/示例

use node_bridge::NodeBridge;

#[tokio::main]
async fn main() {
    let bridge = NodeBridge::new();
    bridge.register("addition", add, None);
    bridge.register_async("find_longer", find_longer, Some("Variable to pass to the function"));
    assert_eq!(bridge.receive("channel_a").await.unwrap(), "Sent this from node!");
    bridge.send("channel_foo", "bar").ok();
    bridge.wait_until_closes().await;
}
 
fn add(params: Vec<i32>, _: Option<()>) -> i32 {
    params[0] + params[1]
}
 
async fn find_longer(params: Vec<String>, pass_data: Option<&str>) -> String {
    assert_eq!(pass_data, Some("Variable to pass to the function"));
    if params[0].len() > params[1].len() {
        return params[0].to_string();
    }
    params[1].to_string()
}

在node.js中的处理

import RustBridge from "rustlang-bridge";
 
const bridge = new RustBridge("/path/to/rust_executable");
await new Promise(resolve => setTimeout(resolve, 500)); // wait for the functions to initialize
console.log(await bridge.addition(10, 20)); // "30"
console.log(await bridge.find_longer("foo", "longer_foo")); // "longer_foo"
bridge.on("channel_foo", data => {
    console.log(data); // "bar"
});
bridge.send("channel_a", "Sent this from node!");

贡献

欢迎贡献!

依赖

~2.3–4MB
~64K SLoC