3个版本 (破坏性更新)
0.4.0 | 2022年11月5日 |
---|---|
0.3.0 | 2022年9月26日 |
0.2.0 | 2021年1月21日 |
9 在 #nakamoto 中排名
每月51次 下载
用于 5 个crate(4个直接使用)
76KB
1.5K SLoC
I/O反应器,驱动协议状态机。
该反应器将网络事件转换为协议事件。这还有一个额外的好处,那就是可以轻松地将nakamoto的网络代码与不同的实现交换,因为代码是完全自包含的。
为了说明上述内容,让我们追踪系统在通过客户端的节点连接收到ping
消息时的行为
Reactor
从套接字读取并解码一个NetworkMessage::Ping
消息。Reactor
将此消息包装成一个协议输入Input::Received(addr, NetworkMessage::Ping)
,其中addr
是接收此消息的套接字的远程地址。Reactor
调用Protocol::step(input, time)
,其中input
是上述输入,而time
是当前本地时间。Protocol
将此消息转发给PingManager
,该管理器构建一个新的输出Out::Message(addr, NetworkMessage::Pong)
,并将其向上游转发到反应器。Reactor
处理输出,将原始消息编码并写入对应于addr
地址的套接字,实际上向原始发送者发送了一个pong
消息。
虽然简化了,但上述步骤提供了一个很好的心理模型,说明了反应堆和协议如何交互来处理网络事件。
依赖项
~1–1.7MB
~33K SLoC