Event loop friendly C++ actor micro-framework

Ivan Baidakou 52b3867b3c update docs 5 vuotta sitten
cmake e4d0cd2cec Add cmake support to find libev 6 vuotta sitten
docs f7b44bd6d3 Update docs 5 vuotta sitten
doxygen @ 88853c2f20 52b3867b3c update docs 5 vuotta sitten
examples 3d76d72158 A bettter code 5 vuotta sitten
include 925ade45b7 Add docs 5 vuotta sitten
src 95e9930f74 Introduce supervisor policy 5 vuotta sitten
tests 00daa2c37e fix tests 5 vuotta sitten
.clang-format 84ad618913 Add ..clang-format 6 vuotta sitten
.gitmodules 13261fe381 update submoudule url 6 vuotta sitten
.travis.yml 8bde204044 fix travis 5 vuotta sitten
CMakeLists.txt fff5f411fe minor cleanup 5 vuotta sitten
LICENSE ae9faa2b0c Moar docs 6 vuotta sitten
README.md f7b44bd6d3 Update docs 5 vuotta sitten
appveyor.yml 99bf636dcb msvc fix attempt (boost::asio) 6 vuotta sitten

README.md

Rotor

rotor is event loop friendly C++ actor micro framework.

Travis Build status codecov license

features

  • minimalistic loop agnostic core
  • various event loops supported (wx, boost-asio, ev) or planned (uv, gtk, etc.)
  • asynchornous message passing interface
  • MPMC (multiple producers mupltiple consumers) messaging, aka pub-sub
  • cross-platform (windows, macosx, linux)
  • inspired by The Reactive Manifesto and sobjectizer

license

MIT

documentation

Please read tutorial, design principles and manual here

Changelog

0.06 (09-Nov-2019)

  • [improvement] registy actor was added to allow via name/address runtime matching do services discovery
  • [improvement, breaking] minor changes in supervisor behavior: now it is considered initialied when all its children confirmed initialization
  • [improvement] supervisor_policy_t was introduced to control supervisor behavior on a child-actor startup failure
  • [example] examples/ev/pong-registry.cpp how to use registry
  • [doc] patterns/Registry was added

0.05 (22-Sep-2019)

  • [improvement] response can be inherited from rotor::arc_base, to allow forwarding requests without copying it (i.e. just intrusive pointer is created)
  • [example] examples/boost-asio/beast-scrapper.cpp has been added; it demonstrates an app with pool of actor workers with request-response forwarding

0.04 (14-Sep-2019)

  • [improvement] the request-response approach is integrated to support basic reliable messaging: response notification failure will be delivered, if the expected response will not arrive in-time
  • [improvement] lambda subscribiers are supported
  • [improvement] actor behavior has been introduced to offload actor's interface
  • [breaking] supervisor is constructed with help of supervisor_config_t, which contains shutdown timeout value
  • [breaking] supervisor does not spawns timeout timer for overall shutdown procedure, instead per-child timers are spawned. The root supervisor the same way monitors child-supervisor shut down
  • [breaking] supervisor create_actor method now takes child max init time value. If it does not confirm, the child actor will be asked for shut down.
  • [breaking] shutdown request sent to an child actor now timeout-tracked by supervisor. The message type has changed to message::shutdown_request_t
  • [breaking] init request sent to an child actor now timeout-tracked by supervisor. The message type has changed to message::init_request_t
  • [breaking] actor's state request message type now message::state_request_t, which follows the generic request/response pattern. The response type is now message::state_response_t.
  • [breaking] {asio, ev, ws} supervisor configs are renamed to have corresponding suffix.

0.03 (25-Aug-2019)

  • [improvement] locality notion was introduced, which led to possibilty to build superving trees, see blog-cpp-supervisors
  • [breaking] the outbound field in rotor::supervisor_t was renamed just to queue
  • [breaking] rotor::address_t now contains const void* locality
  • [breaking] rotor::asio::supervisor_config_t now contains std::shared_ptr to strand, instead of creating private strand for each supervisor
  • [bugfix] redundant do_start() method in rotor::supervisor_t was removed, since supervisor now is able to start self after compliting initialization.
  • [bugfix] rotor::supervisor_t sends initialize_actor_t to self to advance own state to INITIALIZED via common actor mechanism, instead of changeing state directly on early initialization phase (do_initialize)
  • [bugfix] rotor::asio::forwarder_t now more correctly dispatches boost::asio events to actor methods
  • [bugfix] rotor::ev::supervisor_ev_t properly handles refcounter

0.02 (04-Aug-2019)

  • Added libev support

0.01 (24-Jul-2019)

Initial version