3个版本 (破坏性更新)

0.4.0 2022年11月5日
0.3.0 2022年9月26日
0.2.0 2021年1月21日

9#nakamoto 中排名

Download history 87/week @ 2024-04-01 3/week @ 2024-04-08 5/week @ 2024-04-15 7/week @ 2024-04-22 9/week @ 2024-04-29 7/week @ 2024-05-06 9/week @ 2024-05-13 9/week @ 2024-05-20 8/week @ 2024-05-27 9/week @ 2024-06-03 15/week @ 2024-06-10 8/week @ 2024-06-17 14/week @ 2024-06-24 14/week @ 2024-07-08 23/week @ 2024-07-15

每月51次 下载
用于 5 个crate(4个直接使用)

MIT 许可证

76KB
1.5K SLoC

I/O反应器,驱动协议状态机。

该反应器将网络事件转换为协议事件。这还有一个额外的好处,那就是可以轻松地将nakamoto的网络代码与不同的实现交换,因为代码是完全自包含的。

为了说明上述内容,让我们追踪系统在通过客户端的节点连接收到ping消息时的行为

  1. Reactor 从套接字读取并解码一个NetworkMessage::Ping消息。
  2. Reactor 将此消息包装成一个协议输入Input::Received(addr, NetworkMessage::Ping),其中addr是接收此消息的套接字的远程地址。
  3. Reactor 调用Protocol::step(input, time),其中input是上述输入,而time是当前本地时间。
  4. Protocol 将此消息转发给PingManager,该管理器构建一个新的输出Out::Message(addr, NetworkMessage::Pong),并将其向上游转发到反应器。
  5. Reactor 处理输出,将原始消息编码并写入对应于addr地址的套接字,实际上向原始发送者发送了一个pong消息。

虽然简化了,但上述步骤提供了一个很好的心理模型,说明了反应堆和协议如何交互来处理网络事件。

依赖项

~1–1.7MB
~33K SLoC