继 <ZMQ的学习和研究> Request-reply broker in C++

来源:互联网 发布:java web 配置log4j2 编辑:程序博客网 时间:2024/05/19 15:40

//
//Simple request-reply broker in C++
//
// Olivier Chamoux <olivier.chamoux@fr.thalesgroup.com>

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

0 0