14 个版本

0.5.7 2024年6月7日
0.5.6 2024年5月31日
0.4.4 2024年5月18日
0.3.4 2024年5月15日

#1044网络编程

Download history 360/week @ 2024-05-12 488/week @ 2024-05-19 254/week @ 2024-05-26 143/week @ 2024-06-02 40/week @ 2024-06-09 18/week @ 2024-06-16 4/week @ 2024-06-23 22/week @ 2024-06-30 82/week @ 2024-07-28

82 每月下载量
5 个包 中使用

MIT 许可证

56KB
908

Crates.io MIT licensed Build Status

krossbar-bus-lib

Krossbar bus lib

一个用于注册和连接 Krossbar 服务的库

Krossbar 服务使用 UDS 进行相互通信。Krossbar 中心充当服务的会合点,检查权限并连接对应方。

该库使用 krossbar_rpc::rpc::Rpc 连接进行通信。

要注册服务,调用 Service::new。这将尝试使用给定名称注册服务的调用发送到中心。

Service 提供了两个方法子集:作为消息源或消息消费者。

服务

要作为消息源,您有一系列方法来注册服务端点

客户端

要充当消息消费者,您必须使用 Service::connect 连接到客户端。正如预期的那样,中心节点需要检查您是否有权连接到客户端,但连接后,您可以使用一些方法:

轮询

为了接收传入的连接和消息,您需要轮询 Service。有两种方法可以实现这一点:

  1. 使用 Service::run,如果您不再需要服务句柄。这是一个更方便的方法。您可以启动一个任务,在循环中轮询服务。

    
    use std::path::PathBuf;
    
    use tokio;
    
    use krossbar_bus_lib::service::Service;
    
    async fn example() {
        let mut service = Service::new("com.echo.service", &PathBuf::from("/var/run/krossbar.hub.socket"))
        .await
        .expect("Failed to register service");
    
        service
            .register_method("method", |client_name, value: i32| async move {
                println!("Client name: {client_name}");
    
               return format!("Hello, {}", value);
           })
           .expect("Failed to register method");
    
        tokio::spawn(service.run());
    }
    
  2. 使用 Service::poll,如果您仍然需要服务句柄来建立新的连接或注册新的端点。您可以使用future组合器来轮询服务句柄和端点句柄。

    
    use std::path::PathBuf;
    
    use futures::StreamExt;
    use tokio;
    
    use krossbar_bus_lib::service::Service;
    
    async fn example() {
        let mut service = Service::new("com.signal.subscriber", &PathBuf::from("/var/run/krossbar.hub.socket"))
            .await
            .expect("Failed to register service");
    
        let mut client = service.connect("com.signalling.service")
            .await
            .expect("Failed to register to a service");
    
        let mut subscription = client.subscribe::<String>("signal")
            .await
            .expect("Failed ot subscribe ot a signal");
    
        tokio::select! {
            value = subscription.next() => {
                println!("Signal data: {value:?}");
            },
            _ = service.poll() => {}
        }
    }
    

服务文件

为了能够注册为服务并接收连接,您需要为每个服务维护一个服务文件。文件名是服务名称。文件内容是JSON,其中包含一个指向二进制文件的路径,该二进制文件允许注册服务名称,以及允许的连接列表。两者都支持glob。请参阅 示例 以获取大量示例。

监控

具有 monitor 功能允许您使用 Krossbar Monitor 监控服务通信。请参阅相应存储库以了解使用方法。

检查

具有 inspection 功能允许您使用 Krossbar Connect tool 检查服务端点。请参阅相应存储库以了解使用方法。

此外,该工具还允许您使用CLI调用或订阅服务。

示例

请参阅 examples dir 以获取使用示例。

依赖关系

~10-20MB
~279K SLoC