msg_pulse/server/main.cpp

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;
}