Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- #include <sys/time.h>
- #include <string>
- #include <syslog.h>
- #include <thread>
- #include <cstdlib>
- #include <ctime>
- #include "zmq.hpp"
- using namespace std;
- void *worker_thread(void *arg) {
- zmq::context_t *context = (zmq::context_t *) arg;
- zmq::socket_t socket(*context, ZMQ_DEALER);
- socket.connect("inproc://routerfront");
- while (true) {
- zmq::message_t client_adr, msg;
- socket.recv(&client_adr);
- socket.recv(&msg);
- socket.send(client_adr, ZMQ_SNDMORE);
- socket.send(msg);
- }
- return (NULL);
- }
- void router(int workers) {
- zmq::context_t context(1);
- zmq::socket_t socket(context, ZMQ_ROUTER);
- socket.bind("tcp://*:15555");
- zmq::socket_t socket2(context, ZMQ_DEALER);
- socket2.bind("inproc://routerfront");
- // start workers
- for (int i = 0; i < workers; i++) {
- pthread_t worker;
- pthread_create (&worker, NULL, worker_thread, &context);
- }
- while(true) {
- zmq::pollitem_t items [] = {
- { socket, 0, ZMQ_POLLIN, 0 },
- { socket2, 0, ZMQ_POLLIN, 0 }
- };
- zmq::poll (&items [0], 2, -1);
- zmq::message_t client_adr, msg;
- if (items[0].revents & ZMQ_POLLIN) {
- socket.recv(&client_adr);
- socket.recv(&msg);
- socket2.send(client_adr, ZMQ_SNDMORE);
- socket2.send(msg);
- } else if (items[1].revents & ZMQ_POLLIN) {
- socket2.recv(&client_adr);
- socket2.recv(&msg);
- socket.send(client_adr, ZMQ_SNDMORE);
- socket.send(msg);
- }
- }
- }
- int main(int argc, char * argv[]) {
- srand(time(0));
- router(atoi(argv[1]));
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement