Advertisement
Guest User

Untitled

a guest
May 23rd, 2013
164
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.70 KB | None | 0 0
  1. #include <iostream>
  2.  
  3. #include <sys/time.h>
  4. #include <string>
  5. #include <syslog.h>
  6. #include <thread>
  7.  
  8. #include <cstdlib>
  9. #include <ctime>
  10.  
  11. #include "zmq.hpp"
  12.  
  13.  
  14. using namespace std;
  15.  
  16. void *worker_thread(void *arg) {
  17.     zmq::context_t *context = (zmq::context_t *) arg;
  18.  
  19.     zmq::socket_t socket(*context, ZMQ_DEALER);
  20.     socket.connect("inproc://routerfront");
  21.      
  22.     while (true) {
  23.         zmq::message_t client_adr, msg;
  24.         socket.recv(&client_adr);
  25.         socket.recv(&msg);
  26.    
  27.         socket.send(client_adr, ZMQ_SNDMORE);
  28.         socket.send(msg);
  29.     }
  30.  
  31.     return (NULL);
  32. }
  33.  
  34. void router(int workers) {
  35.     zmq::context_t context(1);
  36.  
  37.     zmq::socket_t socket(context, ZMQ_ROUTER);
  38.     socket.bind("tcp://*:15555");
  39.  
  40.     zmq::socket_t socket2(context, ZMQ_DEALER);
  41.     socket2.bind("inproc://routerfront");
  42.  
  43.     // start workers
  44.     for (int i = 0; i < workers; i++) {
  45.         pthread_t worker;
  46.         pthread_create (&worker, NULL, worker_thread, &context);
  47.     }
  48.  
  49.     while(true) {
  50.         zmq::pollitem_t items [] = {
  51.             { socket, 0, ZMQ_POLLIN, 0 },
  52.             { socket2, 0, ZMQ_POLLIN, 0 }
  53.         };
  54.  
  55.         zmq::poll (&items [0], 2, -1);
  56.  
  57.         zmq::message_t client_adr, msg;
  58.         if (items[0].revents & ZMQ_POLLIN) {
  59.             socket.recv(&client_adr);
  60.             socket.recv(&msg);
  61.  
  62.             socket2.send(client_adr, ZMQ_SNDMORE);
  63.             socket2.send(msg);
  64.         } else if (items[1].revents & ZMQ_POLLIN) {
  65.             socket2.recv(&client_adr);
  66.             socket2.recv(&msg);
  67.  
  68.             socket.send(client_adr, ZMQ_SNDMORE);
  69.             socket.send(msg);
  70.         }
  71.     }
  72. }
  73.  
  74. int main(int argc, char * argv[]) {
  75.  
  76.     srand(time(0));
  77.  
  78.     router(atoi(argv[1]));
  79.  
  80. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement