目前我正在编写一个纯 Rust MQTT5 库(我知道那里有现有的库,但我更想学习 Rust),我偶然发现了这个问题。
我正在使用最新的稳定版 rust 和 tokio 1.0.1。
当我通过线路发送数据包时,我经常期望服务器做出响应(下面的示例是 PingReq/PingAck、Ping/Pong)。
省略了很多有关超时和数据包冲突的逻辑,我用 JavaScript 编写了逻辑的简化版本(因为我对此非常了解)。
这种逻辑将如何转化为 Rust 及其未来?或者更清楚地说:我可以以某种方式重新创建awaitPackage + onIncomingPacket 的resolve() 回调函数行为吗?
class Client {
awaitedPacketTypes = {};
/**
* a ping consist of a send ping and a receive pong
*/
async ping(){
await this.sendPacket("Ping");
return await this.awaitPackage("Pong");
}
async sendPacket(packetType) { /*...*/ }
/**
* This expects a specific packet type to be received in the future
* @param {*} packetType
*/
awaitPackage(packetType) {
return new Promise((resolve, reject) …Run Code Online (Sandbox Code Playgroud)