But does your library provide what you say? I mean does it really use ZeroMQ on edges and use ASIO on a binary component level for distributed systems?
I'm sorry if I was not clear enough. At this point, the library (bmq) is really thin and basic. It is a proof-of-principle that you can use ZeroMQ and Asio together; bmq does not provide a lot abstractions beyond what ZeroMQ already offers. That is, it associates sockets with what I call components, i.e., logical units of structuring your applications. (If it helps, think of components as SEDA stages [1].) It also takes these ZeroMQ sockets and hands them to the asynchronous io_service proactor. I will use library in my own projects, so it will probably change quite a bit once I figure out what the right level of abstraction are. In the long run, I would like to have message-passing that allows me to create component-based software which I can easily distribute over multiple machines, where bottlneck components can be executed on separate nodes, or replicated to reduce the load on the edges. Hopefully this helps to better understand what I am after. Another aspect concern parallelism, both multi-core and across several machines. Regarding the former, Both Asio and ZeroMQ use threads (io_service/context). If messages cannot be sent fast enough, maybe it makes sense to add more threads to the ZeroMQ context. If messages cannot be consumed fast enough, it may make sense to launch more threads on io_service::run(). Perhaps one can create a monitoring mechanism that finds out these things automatically. Again, all this is just a vision. Matthias [1] http://matt-welsh.blogspot.com/2010/07/retrospective-on-seda.html