2.4 KiB
2.4 KiB
title
| title |
|---|
| Rust 客户端 |
面临的问题
诸如Bench-tps之类的高级测试是根据客户端特征编写的。 将这些测试作为测试套件的一部分执行时,我们将使用低级的BankClient实现。 当需要对集群运行相同的测试时,我们使用ThinClient(轻客户端)实现。 这种方法的问题在于,它意味着该特性将不断扩展,从而包括新的实用程序功能,并且其所有实现都需要添加新功能。 通过将面向用户的对象与抽象化网络接口的特征分离,我们可以扩展面向用户的对象,以包括各种有用的功能,例如RpcClient的“spinner”,而无需担心扩展特征及其实现。
拟定的解决方案
代替实现客户端特征,应使用其实现来构造ThinClient。 这样,当前具有客户端特征的所有实用程序功能都可以移至ThinClient中。 然后,ThinClient可以移至solana-sdk中,因为它的所有网络相关性都在Client的实现中。 然后,我们将添加一个名为Client的新实现,称为ClusterClient,并将其存在于ThinClient当前所在的Solana-client工具箱中。
重组之后,任何需要客户端的代码都将以ThinClient的形式编写。 在单元测试中,将使用ThinClient<BankClient>调用该功能,而main()函数、基准测试和集成测试将通过ThinClient<ClusterClient>调用该功能。
如果更高级别的组件需要比BankClient能够实现的功能更广,则应按照与此处所述相同的模式,通过实现第二个特征的第二个对象来实现。
错误处理
客户端应使用现有的TransportError枚举来进行错误处理,除了Custom(String)字段应更改为Custom(Box<dyn Error>)。
实施战略
- 在
solana-sdk、RpcClientTng中添加新对象,其中Tng后缀是临时的,代表“TheNextGeneration” - 用
SyncClient的实现来初始化RpcClientTng。 - 将新对象添加到
solana-sdk、ThinClientTng中;使用RpcClientTng和AsyncClient实现对其进行初始化 - 将所有单元测试从
BankClient移至ThinClientTng<BankClient> - 添加
ClusterClient - 将
ThinClient用户移到ThinClientTng<ClusterClient> - 删除
ThinClient并将ThinClientTng重命名为ThinClient - 将
RpcClient用户移到新的ThinClient<ClusterClient> - 删除
RpcClient并将RpcClientTng重命名为RpcClient