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 在 网络编程
82 每月下载量
在 5 个包 中使用
56KB
908 行
krossbar-bus-lib
Krossbar bus lib
一个用于注册和连接 Krossbar 服务的库
Krossbar 服务使用 UDS 进行相互通信。Krossbar 中心充当服务的会合点,检查权限并连接对应方。
该库使用 krossbar_rpc::rpc::Rpc 连接进行通信。
要注册服务,调用 Service::new。这将尝试使用给定名称注册服务的调用发送到中心。
Service 提供了两个方法子集:作为消息源或消息消费者。
服务
要作为消息源,您有一系列方法来注册服务端点
- Service::register_method 用于注册一个可以被任意服务调用的方法。可以用作单向消息接收器(请参阅 Client::message);
- Service::register_signal 用于注册一个信号,其他节点可以订阅。调用 Signal::emit 将向信号订阅者广播一个值;
- Service::register_state 用于注册一个状态,它保存一个值,可以被订阅或调用以检索该值。调用 State::set 将向状态订阅者广播一个值。
客户端
要充当消息消费者,您必须使用 Service::connect 连接到客户端。正如预期的那样,中心节点需要检查您是否有权连接到客户端,但连接后,您可以使用一些方法:
- Client::call 调用方法或检索状态值;
- Client::get 获取远程状态值;
- Client::subscribe 订阅信号或状态变化;
- Client::message 发送单向消息。
轮询
为了接收传入的连接和消息,您需要轮询 Service。有两种方法可以实现这一点:
-
使用 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()); }
-
使用 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