3 releases (breaking)
0.4.0 | Nov 5, 2022 |
---|---|
0.3.0 | Sep 26, 2022 |
0.2.0 | Jan 21, 2021 |
#9 in #nakamoto
47 downloads per month
Used in 5 crates
(4 directly)
76KB
1.5K
SLoC
I/O reactor that drives the protocol state machine.
The reactor translates network events into protocol events. This has the added benefit that it's trivial to swap nakamoto's networking code with a different implementation, as the code is fully self-contained.
To illustrate the above, lets trace the behavior of the system when a ping
message is received via a peer connection to the client:
- The
Reactor
reads from the socket and decodes aNetworkMessage::Ping
message. - The
Reactor
wraps this message into a protocol inputInput::Received(addr, NetworkMessage::Ping)
, whereaddr
is the remote address of the socket on which it received this message. - The
Reactor
callsProtocol::step(input, time)
, whereinput
is the above input, andtime
is the current local time. - The
Protocol
forwards this message to thePingManager
, which constructs a new outputOut::Message(addr, NetworkMessage::Pong)
, and forwards it upstream, to the reactor. - The
Reactor
processes the output, encodes the raw message and writes it to the socket corresponding to theaddr
address, effectively sending apong
message back to the original sender.
Though simplified, the above steps provide a good mental model of how the reactor and protocol interplay to handle network events.
Dependencies
~1–1.7MB
~31K SLoC