#service #connection #rpc #endpoint #protocols #sdk #qrpc

qrpc-sdk

构建qrpc(qaul rpc)扩展的客户端SDK

2个版本

0.1.1 2021年3月2日
0.1.0 2020年10月10日

#49 in #endpoint


4 crate 中使用

GPL-3.0-or-laterAGPL-3.0-or-later

33KB
455

qrpc-sdk

qrpc协议连接rpc代理与不同的服务端点。每个服务端点提供一组可调用的函数和类型序列化数据。

 Your app logic    Serialise types    Pass data along
+--------------+   +--------------+   +--------------+
| Your service | - |   qrpc-sdk   | - |  qrpc-broker |
+--------------+   +--------------+   +--------------+
                                              |
                   +--------------+   +--------------+   +--------------+
                   | Your UI app  | - |   qrpc-sdk   | - |    libqaul   | 
                   +--------------+   +--------------+   +--------------+
                     Your app UI      Deserialise types    Main db/ router

更多信息请参考贡献者手册


lib.rs:

在qrpc消息总线上编写客户端的工具包。这个总线是qaul.net服务生态系统的骨干。通过它,您可以创建与应用程序(称为“服务”)交互的应用程序,并与相同消息代理上的其他服务。

这些crate文档描述了API和基本用法。有关该生态系统核心概念的概述,请参阅贡献者手册

此外,您可以通过将"--features internals"传递给您的cargo调用来访问内部实用程序的文档。这些组件无论如何都会通过API公开,但只在需要时进行文档记录,以避免使主要文档杂乱。

使用此SDK

为了与运行的qrpc-broker实例交互,您的服务需要注册自己及其功能。

首先,您的服务需要一个地方来保存一些状态,通过组合此sdk的不同部分来创建一个应用程序。

您创建一个Service和一个RpcSocket,并连接到rpc代理套接字。您使用此连接的第一件事是在Service上调用register(...)。这建立了连接,代理将其服务保存到其地址查找表中,并且您获得一个hash-id以在未来的交互中识别您。

use qrpc_sdk::{Service, RpcSocket, default_socket_path};

let mut serv = Service::new("com.example.myapp", 1, "A simple app");
let (addr, port) = default_socket_path();
let sock = RpcSocket::connect(addr, port).await?;

serv.register(sock).await?;
println!("Service registered! ID: {}", serv.hash_id().unwrap());

接下来,您需要包含您想要使用的组件的客户端库,并在您的服务上调用组件初始化器中的connect(...)


// serv.connect(libqaul_rpc::Init).await?;

这将建立与libqaul组件的连接并验证其功能集。此机制由ServiceConnector提供。[点击查看](https://docs.rs/qrpc-sdk/0.1.1/trait.ServiceConnector.html)。您的服务也需要实现此机制才能在qrpc总线上被其他服务使用。

之后,您可以在组件的公共API类型上调用函数。您可以通过服务句柄获取其副本。


// net.qaul.libqaul is exposed as libqaul_rpc.COMP_ID
// let users = serv.component("net.qaul.libqaul").list_users().await?;
// println!("Available users: {:?}", users);

如果您想查看最小功能服务的示例,请参阅ping存储库。

依赖关系

~7–20MB
~250K SLoC