Substrate底层提供了丰富的RPC访问接口和链上交互,具体见https://polkadot.js.org/api/substrate/rpc.html。Substrate的RPC server实现了HTTP和WebSocket两种协议供客户端访问,默认的服务端口分别是9933和9944。实现RPC HTTP client比较简单,使用支持HTTP协议的第三方库即可,比如reqwest。这里介绍使用第三库ws封装一个RPC WebSoket client 模块,通过它可以方便快捷访问Substrate RPC server。
首先在cargo.xml加入ws库:

然后定义WsClient struct,实现几个handler:

on_open()方法当client和server建立连接后被调用,它向server发送数据请求;on_message()方法当server返回数据时被调用,on_message_fn是一个回调函数,负责把数据发送给接收方。on_get_request_msg()就是具体的回调函数。

on_message()是模块中唯一一个public函数,它首先建立一个异步通信channel,得到发送端和接收端的通信句柄,然后调用ws库的connect()方法和server建立连接,设置回调函数,发送数据,最后等待10秒时间把接收到的数据作为函数返回结果。
可用如下方式使用本模块:

That's all.
网友评论