[zeromq-dev] C++ 0mq helper
cibercitizen1
cibercitizen1 at gmail.com
Wed Dec 24 10:50:16 CET 2014
Hi all,
I've written a little and simple helper class that permitts easy socket
creation,
easy multi-send/receive, and asynchronous listener callbacks (lambdas,
function pointers, function objects) for receivers.
If someone finds it worth, I can post the file.
Thanks.
Some examples of use follows:
--- serverREP.cpp -----------------------------------------
SocketAdaptor< ZMQ_REP > sa;
sa.bind ("tcp://*:5555");
sa.onMessage ( [&] (zmq::socket_t & socket ) -> void {
// Get the request.
std::vector<std::string> lines = receiveText (socket);
std::cout << " received -------- \n";
for ( auto s : lines ) { std::cout << s << "\n"; }
// Send the reply
std::vector<std::string> multi = { "Welt Welt", "World World" };
sendText ( socket, multi );
});
sa.wait (); // never happens
------------------------------------------------------------------
-- clientREQ.cpp ----------------------------------------------------
SocketAdaptor< ZMQ_REQ > sa;
sa.connect ("tcp://localhost:5555");
// Send the request
std::vector<std::string> multi = { "Hallo Hallo", "Hello Hello" };
sa.sendText ( multi );
// Get the reply.
auto lines = sa.receiveText ();
std::cout << " received -------- \n";
for ( auto s : lines ) { std::cout << s << "\n"; }
------------------------------------------------------------------
-- broker.cpp ----------------------------------------------------
SocketAdaptor< ZMQ_ROUTER > frontend_ROUTER;
SocketAdaptor< ZMQ_DEALER > backend_DEALER;
frontend_ROUTER.bind ("tcp://*:8000");
backend_DEALER.bind ("tcp://*:8001");
frontend_ROUTER.onMessage ( [&] (zmq::socket_t & socket ) {
auto lines = receiveText (socket);
// routing
backend_DEALER.sendText (lines);
});
backend_DEALER.onMessage ( [&] (zmq::socket_t & socket ) {
auto lines = backend_DEALER.receiveText ();
// routing
frontend_ROUTER.sendText (lines);
});
// wait (never happens)
frontend_ROUTER.wait ();
backend_DEALER.wait ();
------------------------------------------------------------------
-- subscriptor.cpp ----------------------------------------------------
SocketAdaptor< ZMQ_SUB > sa;
sa.connect ("tcp://localhost:5555");
sa.subscribe ("news");
while (true) {
// Get news
auto lines = sa.receiveText ();
std::cout << " received -------- \n";
for ( auto s : lines ) {
std::cout << s << "\n";
}
} // true
--------------------------------------------------------------------
-- publisher.cpp ----------------------------------------------------
SocketAdaptor< ZMQ_PUB > sa;
sa.bind ("tcp://*:5555");
int i=1;
while (true) {
std::cout << " publishing " << i << "\n";
std::vector<std::string> multi = { "news", "nachrichten" };
sa.sendText ( multi );
sleep (1);
i++;
} // true
--------------------------------------------------------------------
More information about the zeromq-dev
mailing list