lwleen-rpc

Crates.iolwleen-rpc
lib.rslwleen-rpc
version1.1.0
created_at2025-08-28 10:26:47.294213+00
updated_at2025-08-28 10:26:47.294213+00
descriptionrpc(信令路由), 组件间数据通信
homepagehttps://docs.qq.com/aio/p/sc3gu8sft77pu68
repository
max_upload_size
id1813964
size188,703
(lwleen)

documentation

https://docs.rs/lwleen-rpc

README

介绍

  1. 主页 Homepage
  2. 基础库 https://crates.io/crates/lwleen-rpc
  3. 应用库 https://crates.io/crates/lwleen
  4. crates文档 https://docs.rs/lwleen-rpc

RPC 是 Remote Procedure Call(远程过程调用), 用于组件间数据通信

⚡️ 快速开始

唯一对外接口 信令路由(rpc)

use lwleen_rpc::prelude::*;

let 信令路由c1 =  信令路由::default();
let 信令路由c2 =  信令路由c1.clone();
let 结果 = 信令路由c1.pool异步任务_run同步完成(async move{
    let out1 = 信令路由c2.rpc信令路由_心跳("异步测试1").await;
    let out2 = 信令路由c2.rpc信令路由_心跳("同步测试2").run同步完成();
    format!("返回结果:  {out1:?}   {out2:?}")
});
println!("{结果:?}");



//---- 测试 stdout ---- 
Ok("返回结果: Ok((\"💖心跳回答: 异步测试1\", 1754650154616267068)) Ok((\"💖心跳回答: 同步测试2\", 1754650154616303301))")

🛸 可扩展

扩展 信令路由(rpc)

  1. 使用过程宏gen_特征_derive生成特征代码 (rust孤儿规则)

  2. 新建信令表

  3. 使用宏impl信令特征!()为信令表实现信令特征, 即执行函数

use lwleen_rpc::prelude::*;

// 1.第一步
#[gen_特征_derive(Demo_模块特征)]
impl 信令路由{
    fn demo(&self,参数:impl AsRef<str> ) -> impl 信令任务<anyhow_Result<String>>{
        core发布信令任务!(self, 信令表::demo{ 参数:参数.as_ref().to_string()  },  信令表::demo_回复 => 返回 )
    }
}

// 2.第二步
#[derive(Clone, Serialize, Deserialize)]//可选特征
enum 信令表{
    demo{参数:String },
    demo_回复{ 返回:String },
}
impl信令特征!(信令表, 执行函数);      // 所有`信令表`必须实现此特征


// 3.第三步
async fn 执行函数(信令路由:信令路由,id:信令ID,单个信令:Box信令特征)->anyhow_Result<Box信令特征>{ 
    match 单个信令.try_into()?{
        信令表::demo{ 参数 }=>{
			return anyhow::Ok(Box::new(信令表::demo_回复 { 返回: format!("完成demo  {参数} ") }));
        }
        _ =>{ return Err(anyhow_err!("信令不存在")); }
    }
}

说明
#[gen_特征_derive(_)] 生成特征代码
core发布信令任务!() 生成一个任务Task
impl信令特征!() 为信令表实现特征
anyhow_Result anyhow::Result 的别名
Box信令特征 Box<dyn 信令特征> 的别名

使用参考应用库 https://crates.io/crates/lwleen

🌈 自定义服务端

use async_std;
let 信令路由c1 = 信令路由::new(rpc类型::none自定义);    // 用于自定义服务端
let 信令路由c2 = 信令路由c1.clone();
std::thread::spawn(move||{
    async_std::task::block_on(async move{
        while let Ok(msg) = 信令路由c2.core_接收通道().recv().await{
            async_std::task::spawn( 信令路由::new信令解包_执行(信令路由c2.clone(), msg) );
        }
    });
});

✅ 基准测试(代码性能)

Intel(R) Core(TM) i3-7100 CPU @ 3.90GHz

[任意服务端] rpc信令路由_连通测试 run同步完成
                        time:   [91.330 ns 91.469 ns 91.660 ns]
Found 15 outliers among 100 measurements (15.00%)
  2 (2.00%) high mild
  13 (13.00%) high severe

[default == default无服务端] rpc信令路由_连通测试 异步
                        time:   [100.54 ns 101.01 ns 101.77 ns]
Found 13 outliers among 100 measurements (13.00%)
  2 (2.00%) high mild
  11 (11.00%) high severe
[futures单线程] rpc信令路由_连通测试 异步
                        time:   [7.6526 µs 7.8649 µs 8.1285 µs]
Found 16 outliers among 100 measurements (16.00%)
  11 (11.00%) high mild
  5 (5.00%) high severe

[rusty_pool线程池] rpc信令路由_连通测试 异步
                        time:   [9.5018 µs 9.6233 µs 9.7548 µs]
Found 12 outliers among 100 measurements (12.00%)
  1 (1.00%) low severe
  1 (1.00%) low mild
  5 (5.00%) high mild
  5 (5.00%) high severe
Commit count: 0

cargo fmt