#actor #actix #tokio #async #async-trait

sampr

A message passing framework using actors

1 unstable release

0.1.0 Jun 26, 2023

#1533 in Asynchronous

Custom license

25KB
387 lines

Simple Async Message Passing in Rust

The sampr crate provides a message passing framework inspired by actix. In contrast to the latter sampr uses rust's async/await language feature to deal with futures.

Overview

Actors are defined by implementing the Actor trait for an arbitrary type. An Actor can receive and process messages by implementing the Handler<M> trait for that specific message. When started, each Actor runs asynchronously as part of its Context in a separate tokio::task. Whenever a message is received the respective handler function is called. As rust does, at the time of writing this, not support async functions in traits, sampr currently relies on async_trait.

Current features

  • Sending messages between actors and wait for their result.
  • Spawning futures into an actor's context and waiting for it to resolve.
  • Adding Streams into an actor's context and waiting for it to produce items.
  • Stopping an actor, moving the object back to the caller.

Missing features

  • Sending messages between actors without blocking the sender's Context, i.e., an .send() function taking a callback (this can be achieved already by spawning a task, but needs some syntactic sugar).
  • Timers for doing work periodically.

Dependencies

~3–4.5MB
~81K SLoC