[zeromq-dev] Creating a Simple HTTP Server using zmq_msg_send and zmq_send
Satish
sa29.subramaniam at gmail.com
Mon Jul 7 05:03:11 CEST 2014
Hello Programmers
I am trying to get acquaint using zeromq library and am developing a
program provided below on this forum.
I want to use zeromq message to retrieve HTTP message and send HTTP
response to multiple client.
I have gone through zguide documentation but there is only a mention of
Multiple client connecting to zeromq broker/process via InProcess (inproc).
I am deliberately not using inproc for queues purposes/ inter threading
messaging as I want this done via TBB queuing.
However the crux of the issue I am not get the zeromq to send back a
response to a web-browser using zmq_send and zmq_msg_send.
I have tried using zmq_msg_send because in runtime there is a possbility of
have large data stream sent back to client/web browser.
I want to zmq_msg structure there is no need to specify the data
limitations will receiving and sending stream from and to the client.
How can I solve problem?
Please help.
Thank you.
Satish
-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
void release(void* data, void* hint){}
void main(int argc, char** argv){
void* ZMQCONTEXT = ::zmq_ctx_new();
std::istringstream &instr = std::istringstream();
zmq_msg_t message = { "" };
int init_status = 0, multi_status = 0;
zmq_pollitem_t timer[2] = { { ::zmq_socket(ZMQCONTEXT, ZMQ_STREAM), 0,
ZMQ_POLLIN, 0 }, { 0, 0, ZMQ_POLLOUT, 0 } };
int POLLED_SIZE = sizeof(timer) / sizeof(zmq_pollitem_t);
timer[1].socket = timer[0].socket;
const char *tcp_desc = "tcp://*:9090";
::zmq_bind(timer[0].socket, tcp_desc);
char http_response[100] =
"HTTP/1.0 200 OK\r\n"
"Content-Type: text/plain\r\n"
"\r\n"
"Hello, World!";
int packet_size = sizeof(http_response) / sizeof(char);
::zmq_msg_init(&message);
do
{
for (int p = 0; p < POLLED_SIZE; p++){
::zmq_poll(&timer[p], 1, 10);
}//for
::zmq_msg_recv(&message, timer[0].socket, 0);
while (::zmq_msg_more(&message) == 1)
{
::zmq_msg_recv(&message, timer[0].socket, ZMQ_DONTWAIT);
}
std::cout << std::endl << "Size = " << ::zmq_msg_size(&message) <<
std::endl;
instr.str(static_cast<char*>(zmq_msg_data(&message)));
::zmq_msg_close(&message);
std::cout << "Data Received = " << instr.str() << std::endl;
//send back the response
//Prefix the socket with port id
::zmq_send(timer[0].socket, instr.str().c_str(),
instr.str().size(), ZMQ_SNDMORE);
//Send payload
::zmq_send(timer[0].socket, http_response, packet_size,
ZMQ_SNDMORE);
//Postfix the socket with port id
::zmq_send(timer[0].socket, instr.str().c_str(),
instr.str().size(), ZMQ_SNDMORE);
::zmq_send(timer[0].socket, 0, 0, ZMQ_SNDMORE);
std::cout << "Sending..." << http_response;
} while (std::cin.get() == 0xd);
for (int p = 0; p < POLLED_SIZE; p++){
::zmq_unbind(timer[p].socket, tcp_desc);
::zmq_close(timer[p].socket);
}
::zmq_ctx_shutdown(&ZMQCONTEXT); ::zmq_ctx_term(&ZMQCONTEXT);
std::cin.get();
}
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://lists.zeromq.org/pipermail/zeromq-dev/attachments/20140706/3db3909a/attachment.htm>
More information about the zeromq-dev
mailing list