https://crates.io/crates/net_sync_tokio
This is a pure-rust asynchronous network synchronization crate (using tokio) that recreates familiar asynchronous paradigms but in a network context.
Let A
and B
be two nodes with a pre-established ordered+reliable connection to each other (e.g., over TCP, TLS, QUIC, etc)
-
join Given
A
executing functionf_a -> r_a
andB
executing functionf_b -> r_b
, returnr_a
toA
andr_b
toB
-
try_join Given
A
executing functionf_a -> Result<r_a>
andB
executing functionf_b -> Result<r_b>
, returnResult<r_a>
to A andResult<r_b>
to B iffResult<r_a> = Ok(r_a)
ANDResult<r_b> = Ok(r_b)
. A global error is returned if either one of the nodes fails -
select Given
A
executing functionf_a -> r_a
andB
executing functionf_b -> r_b
, returnr_a
toA
ifr_a
is computed first, or, returnr_b
toB
ifr_b
is computed first -
try_select Given
A
executing functionf_a -> Result<r_a>
andB
executing functionf_b -> Result<r_b>
, returnResult<r_a>
toA
ifResult<r_a>
is computed first ANDResult<r_a> = Ok(r_a)
, or, returnResult<r_b>
toB
ifResult<r_b>
is computed first ANDResult<r_b> = Ok(r_b)
. Returns a global error if both nodes fail.
Additionally, there is a sync_start
module that allows the synchronization of two operations at approximately the same time.
Examples for every operation are in the source code under src/sync/[...]
In the future, this crate will include a NetMutex
and NetRwLock
abstraction.
Highly useful for operations that need to be coordinated across the network concurrently (e.g., TCP/UDP hole-punching)