#include #include #include #include #include void *worker_routine (void *arg) { zmq::context_t *ctx = (zmq::context_t*) arg; zmq::socket_t s (*ctx, ZMQ_REP); s.connect ("inproc://workers"); while (true) { zmq::message_t request; s.recv (&request); sleep (1); zmq::message_t reply (10); memset (reply.data (), 0, reply.size ()); s.send (reply); } } int main(int ac, char** av) { int threads = 5; zmq::context_t ctx (threads); zmq::socket_t workers (ctx, ZMQ_XREQ); workers.bind ("inproc://workers"); zmq::socket_t clients (ctx, ZMQ_XREP); clients.bind ("tcp://lo:5555"); for (int i = 0; i != 10; i++) { pthread_t worker; int rc = pthread_create (&worker, NULL, worker_routine, (void*) &ctx); assert (rc == 0); } zmq::device (ZMQ_QUEUE, clients, workers); return 0; }