#reactive #event-driven #messaging #sockets #transport #networking

reactive-messaging

Reactive client/server communications, focused on high performance

11 releases

0.3.0 Feb 20, 2024
0.2.4 Feb 18, 2024
0.2.3 Jan 29, 2024
0.2.2 Nov 17, 2023
0.1.4 Jul 16, 2023

#1324 in Asynchronous

Download history 1/week @ 2024-07-28 6/week @ 2024-09-22 4/week @ 2024-09-29

164 downloads per month

Unlicense

3.5MB
3.5K SLoC

reactive-messaging

Provides Stream-based reactive client/server communications focused on high performance -- through sockets, shared mem IPCs and other goodies -- async-powered by Tokio.

The distinct features of this library are:

  • a thorough protocol modeling, with the help of Rust's powerful enums;
  • ease of logic decoupling by using reactive Streams for the client / server logic;
  • the main network loop for both client & server is fully optimized;
  • const-time (yet powerful) configurations, to achieve the most performance possible;
  • zero-cost retrying strategies & dropping the connection vs ignoring on errors through const time configs & the keen-retry lib
  • for version 1: only textual socket protocols are supported by now -- binary & shared mem IPCs to be added later;

Taste it

Take a look at the ping-pong game in example/, which shows some nice patterns on how to use this library:

  • How the ping-pong game logic is shared among the client and server;
  • How the protocol is modeled;
  • How to work with server-side sessions;
  • How decoupled and testable those pieces are;
  • How straight-forward it is to create flexible server & client applications once the processors are complete.

beta status

The API has been stabilized -- new features yet to be added for v1.0:

  • allow reactive processors to produce all combinations of fallible/non-fallible & futures/non-futures for responsive & unresponsive logic processors (currently, only Streams of non-fallible & non-future items are allowed)
  • better docs
  • clean the code for the ping-pong example and the recommended patterns for using this lib

Dependencies

~20–27MB
~153K SLoC