A while ago, Maciej Gajewski started an effort to use Asio to observe a ZeroMQ
socket [1]. Based on his code, I put together a thin library that wraps the
implementation details. Since other have requested a working example, here it
is now at github:
https://github.com/mavam/bmq
Any feedback is highly appreciated. A basic usage example looks like this:
#include
#include
int main()
{
boost::asio::io_service io;
bmq::context ctx(1);
bmq::component c(ctx, io);
auto sink = c.add_sink(ZMQ_PAIR, "inproc://x");
c.subscribe(sink, [](bmq::message&& msg)
{
std::string str(static_cast(msg.data()), msg.size());
std::cout << str << std::endl;
});
auto source = c.add_source(ZMQ_PAIR, "inproc://x");
bmq::message msg(const_cast("foo"), 3, nullptr);
source->send(msg);
// Execute message handler.
io.poll();
return 0;
}
At this point, the library is really thin and only provides very rudimentary
wrapping of ZeroMQ. In the future, I plan to extend it in order to facilitate
applications that build on message-passing. The dataflow abstraction I envision
is essentially a directed graph, where nodes represent components and edges
communication links. 0mq provides the edges and the Asio handles asynchronous
event processing at the component level. The motiviation is that this model
lends itself well for scaling out distributed systems over large clusters.
Matthias
[1] http://permalink.gmane.org/gmane.network.zeromq.devel/9538