48 lines
867 B
C++
48 lines
867 B
C++
|
|
#include <zmq.hpp>
|
|
#include <assert.h>
|
|
#include <pthread.h>
|
|
#include <unistd.h>
|
|
#include <string.h>
|
|
|
|
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;
|
|
}
|