繼 Request-reply broker in C++

//
//Simple request-reply broker in C++
//
// Olivier Chamoux <[email protected]>

#include "zhelpers.hpp"

int main (int argc,char *argv[])
{
//Prepare our context and sockets
zmq::context_t context(1);
zmq::socket_t frontend (context, ZMQ_ROUTER);
zmq::socket_t backend (context, ZMQ_DEALER);

frontend.bind("tcp://*:5559");
backend.bind("tcp://*:5560");

//Initialize poll set
zmq::pollitem_t items[] = {
{ frontend, 0, ZMQ_POLLIN, 0 },
{ backend,0, ZMQ_POLLIN, 0 }
};

//Switch messages between sockets
while (1) {
zmq::message_t message;
int more;//Multipart detection

zmq::poll (&items[0],2, -1);

if (items[0].revents& ZMQ_POLLIN) {
while (1) {
//Process all parts of the message
frontend.recv(&message);
size_t more_size = sizeof (more);
frontend.getsockopt(ZMQ_RCVMORE,&more, &more_size);
backend.send(message, more?ZMQ_SNDMORE: 0);

if (!more)
break;//Last message part
}
}
if (items[1].revents& ZMQ_POLLIN) {
while (1) {
//Process all parts of the message
backend.recv(&message);
size_t more_size = sizeof (more);
backend.getsockopt(ZMQ_RCVMORE,&more, &more_size);
frontend.send(message, more?ZMQ_SNDMORE: 0);
if (!more)
break;//Last message part
}
}
}
return0;
}

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章