basiliscos / Cpp Rotor
Licence: mit
Event loop friendly C++ actor micro-framework
Stars: ✭ 111
Programming Languages
cpp17
186 projects
Projects that are alternatives of or similar to Cpp Rotor
Webcc
Lightweight C++ HTTP client and server library based on Asio for embedding purpose.
Stars: ✭ 167 (+50.45%)
Mutual labels: boost, asio
SierraChartZorroPlugin
A Zorro broker API plugin for Sierra Chart, written in Win32 C++.
Stars: ✭ 22 (-80.18%)
Mutual labels: boost, asio
Asio samples
Examples (code samples) describing the construction of active objects on the top of Boost.Asio. A code-based guide for client/server creation with usage of active object pattern by means of Boost C++ Libraries.
Stars: ✭ 191 (+72.07%)
Mutual labels: boost, asio
Beasthttp
Provides helper tools for creating RESTful services using Boost.Beast
Stars: ✭ 227 (+104.5%)
Mutual labels: boost, asio
boost beast websocket echo
A collection of Demo applications to try to help you understand how Asio and Beast work
Stars: ✭ 12 (-89.19%)
Mutual labels: boost, asio
Boost Asio Study
Examples and toturials for C++ Boost Asio library.
Stars: ✭ 144 (+29.73%)
Mutual labels: boost, asio
Cpp Bredis
Boost::ASIO low-level redis client (connector)
Stars: ✭ 117 (+5.41%)
Mutual labels: boost, asio
texugo
🦡 Fast, flexible, multiplatform, lightweight and, dependency-free message gateway
Stars: ✭ 18 (-83.78%)
Mutual labels: boost, asio
ufw
A minimalist framework for rapid server side applications prototyping in C++ with dependency injection support.
Stars: ✭ 19 (-82.88%)
Mutual labels: boost, asio
boost-wintls
Native Windows TLS stream wrapper for use with boost::asio
Stars: ✭ 24 (-78.38%)
Mutual labels: boost, asio
asio-extensions
Additional functionality built on top of (Boost.)Asio
Stars: ✭ 16 (-85.59%)
Mutual labels: boost, asio
mtxclient
Client API library for Matrix, built on top of Boost.Asio
Stars: ✭ 21 (-81.08%)
Mutual labels: boost, asio
Beast
HTTP and WebSocket built on Boost.Asio in C++11
Stars: ✭ 3,241 (+2819.82%)
Mutual labels: boost, asio
Actor4j Core
Actor4j is an actor-oriented Java framework. Useful for building lightweighted microservices (these are the actors themselves or groups of them). Enhanced performance of message passing.
Stars: ✭ 48 (-56.76%)
Mutual labels: actor
Graphical Debugging
GraphicalDebugging extension for Visual Studio
Stars: ✭ 88 (-20.72%)
Mutual labels: boost
Rotor
rotor
is event loop friendly C++ actor micro framework.
features
- minimalistic loop agnostic core
- erlang-like hierarchical supervisors, see
- various event loops supported (wx, boost-asio, ev) or planned (uv, gtk, etc.)
- asynchornous message passing interface
- request-response messaging with cancellation capabilities, see
- 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.14 (20-Feb-2021)
- the dedicated article with highlights: en and ru
- [improvement] actor identity has been introduced. It can be configured or generated via
address_maker
plugin - [improvement]
actor::do_shutdown()
- optionally takes shutdown reason - [improvement/breaking] instead of using
std::error_code
theextended_error
class is used. It wrapsstd::error_code
, provides string context and pointer to the nextextended_error
cause. This greatly simplfies error tracking of errors. Every response now containsee
field instead ofec
. - [improvement]
actor
has shutdown reason (in form ofextended_error
pointer) - [improvement] delivery plugin in debug mode it dumps shutdown reason in shutdown trigger messages
- [improvement] actor identity has
on_unlink
method to get it know, when it has been unlinked from server actor - [improvement] add
resources
plugin for supervisor - [breaking] all responses now have
extended_error
pointer instread ofstd::error_code
- [breaking]
shutdown_request_t
andshutdown_trigger_t
messages how have shutdown reason (in form ofextended_error
pointer) - [bugfix]
link_client_plugin_t
do not invoke custom callback, before erasing request in case of failure - [bugfix]
child_manager_plugin_t
reactivate self if a child was created from other plugin. - [bugfix]
registy actor
incorrectly resolves postponed requests to wrong addresses
0.13 (26-Dec-2020)
- [improvement] delivery plugin in debug mode dumps discarded messages
- [breaking]
state_response_t
has been removed - [bugfix] allow to acquire & release resources in via
resources_plugin_t
, during other plugin configuration - [bugfix] foreigners_support_plugin_t did not deactivated self properly, caused assertion fail on supervisor shutdown, when there was foreign subscriptions
- [bugfix] link_client_plugin_t did not notified linked server-actors, if its actor is going to shutdown; now server-actors are requested to unlink
- [bugfix] starter_plugin_t sometimes crashed when subscription confirmation message arrives when actor is in non-initializing phase (i.e. shutting down)
- [bugfix] root supervisor is not shutdown properly when it is linked as "server"
0.12 (08-Dec-2020)
- [improvement] added
std::thread
backend (supervisor) - [bugfix] active timers, if any, are cancelled upon actor shutdown finish
- [bugfix] supervisor shutdown message is lost in rare cases right after child actor start
- [example]
examples/thread/sha512.cpp
(new) - [documentation] updated
Event loops & platforms
- [documentation] updated
Patterns
withBlocking I/O multiplexing
- [deprecated] state_response_t, state_request_t will be removed in v0.13
0.11 (20-Nov-2020)
- [improvement] when supervisor shuts self down due to child init failure, the supervisor init error code is "failure escalation"
- [documentation] updated
Advanced examples
, - [bugfix] when actor shuts self down all its timers are properly cancelled
- [bugfix] in rare case supervisor starts, event if child failed to init
- [bugfix] asio: more correct timers cancellation implementation
- [bugfix] ev: more correct shutdown (avoid memory leaks in rare cases)
0.10 (09-Nov-2020)
- [improvement/breaking] Generic timers interface
- [improvement] Request cancellation support
- [improvement] added
make_response
methods when message should be created, but send later delayed - [improvement] more debug information in message delivery plugin
- [documentation] Integration with event loops
- [documentation] Requests cancellation and timers are demonstrated in the Advanced Examples section
- [example]
examples/boost-asio/ping-pong-timer.cpp
(new) - [example]
examples/boost-asio/beast-scrapper.cpp
(updated) - [bugfix] avoid double configuration of a plugin in certain cases when interacting with resources plugin
- [bugfix] more correct cmake installation (thanks to Jorge López Tello, @LtdJorge)
0.09 (03-Oct-2020)
- the dedicated article with highlights: en and ru
- [improvement] rewritten whole documentation
- [improvement/breaking] plugin system where introduced for actors instead of behaviors
- [improvement]
actor_config_t
was introduced, which now holds pointer to supervisor, init and shutdown timeouts - [improvement]
builder
pattern was introduced to simplify actors construction - [breaking]
supervisor_config_t
was changed (inherited fromactor_config_t
) - [breaking]
actor_base_t
andsupervisor_t
constructors has changed - now appropriate config is taken as single parameter. All descendant classes should be changed - [breaking] if a custom config type is used for actors/supervisors, they
should define
config_t
inside the class, and templatedconfig_builder_t
. - [breaking] supervisor in actor is now accessibe via pointer instead of refence
- [bugfix]
supervisor_ev_t
not always correctly released EV-resources, which lead to leak - [bugfix]
actor_base_t
can be shutted down properly even if it did not started yet
0.08 (12-Apr-2020)
- [bugfix] message's arguments are more correctly forwarded
- [bugfix] actor's arguments are more correctly forwarded in actor's
creation in
rotor::supervisor_t
androtor::asio::supervisor_asio_t
- [bugfix]
rotor::asio::forwarder_t
now more correctly dispatchesboost::asio
events to actor methods; e.g. it works correctly now withasync_accept
method ofsocket_acceptor
0.07 (02-Apr-2020)
- [improvement] more modern cmake usage
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 nowmessage::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 inrotor::supervisor_t
was renamed just toqueue
- [breaking]
rotor::address_t
now containsconst void*
locality - [breaking]
rotor::asio::supervisor_config_t
now containsstd::shared_ptr
tostrand
, instead of creating private strand for each supervisor - [bugfix] redundant
do_start()
method inrotor::supervisor_t
was removed, since supervisor now is able to start self after compliting initialization. - [bugfix]
rotor::supervisor_t
sendsinitialize_actor_t
to self to advance own state toINITIALIZED
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
Note that the project description data, including the texts, logos, images, and/or trademarks,
for each open source project belongs to its rightful owner.
If you wish to add or remove any projects, please contact us at [email protected].