In the C++ project I am working on, we have an application consisting of several processes deployed on different machines. This network of processes is dynamic since processes (clients or background services) can be started and terminated during the application's lifetime.
We have already a module that allows to transport arbitrary data over the network through RPC, and we are using it to exchange information (such as status information, progress information, error codes, etc) between the processes. We would like to have a more abstract layer to handle asynchronous communication (currently, the RPC is executed synchronously), and to allow processes to be started and terminated dynamically and still find each other.
We recently looked for a solution and we think we can use something like Scala actors and remote actors (see e.g. this tutorial). Another language using the actor model that has been around longer than Scala is Erlang (see also this question).
Actors are objects that have a behaviour and a mailbox, share no data. Actors are executed concurrently, and communicate through asynchronous message exchange. As part of their behaviour, actors can create other actors. Messages are also represented as objects.
The simplest case is that actors live in the same process. In this case they can address each other using a handle (reference, pointer, unique identifier). The actor implementation hides the underlying threads and any other details. When actors live in different processes (and possibly on different machines in a network) they are identified by an IP address, a port and a name. In this case we speak of remote actors (see the short example at the top of this page).
In our case, we would have one actor on each process, taking care of all the communication, i.e. we need some kind of remote actors.
On wikipedia I have found some links to actor libraries for C++ and I have started to look at Theron. Theron seems a very well-written and documented library but, to my understanding, it does not support remote actors: all actors must live within the same process. It is possible to create several actor pools (frameworks), but all these pools must live in the same process.
So I wanted to ask if someone knows other C++ libraries that support the remote actor concept as sketched above.
This question has been edited wrt the original question, following indications from programmers-meta discussion.
Other frameworks I have looked at are libcppa (should support remote actors, but it is still under development, currently version 0.1), actor-cpp (also under development), and libactor, which is in C (the web site says it "is usable, although it may not be ready for production").