Created
January 19, 2016 15:57
-
-
Save lancecarlson/fb0cfd0354005098d579 to your computer and use it in GitHub Desktop.
ZeroMQ HTTP example
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
clang -Wall http.c -o http -L/usr/local/Cellar/zeromq/4.0.5_2/lib/ -lzmq && ./http |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#include <zmq.h> | |
#include <string.h> | |
#include <assert.h> | |
int main (void) { | |
void *ctx = zmq_ctx_new (); | |
assert (ctx); | |
/* Create ZMQ_STREAM socket */ | |
void *socket = zmq_socket (ctx, ZMQ_STREAM); | |
assert (socket); | |
int rc = zmq_bind (socket, "tcp://*:8080"); | |
assert (rc == 0); | |
/* Data structure to hold the ZMQ_STREAM ID */ | |
uint8_t id [256]; | |
size_t id_size = 256; | |
while (1) { | |
/* Get HTTP request; ID frame and then request */ | |
id_size = zmq_recv (socket, id, 256, 0); | |
assert (id_size > 0); | |
/* Prepares the response */ | |
char http_response [] = | |
"HTTP/1.0 200 OK\r\n" | |
"Content-Type: text/plain\r\n" | |
"\r\n" | |
"Hello, World!"; | |
/* Sends the ID frame followed by the response */ | |
zmq_send (socket, id, id_size, ZMQ_SNDMORE); | |
zmq_send (socket, http_response, strlen (http_response), ZMQ_SNDMORE); | |
/* Closes the connection by sending the ID frame followed by a zero response */ | |
zmq_send (socket, id, id_size, ZMQ_SNDMORE); | |
zmq_send (socket, 0, 0, ZMQ_SNDMORE); | |
/* NOTE: If we don't use ZMQ_SNDMORE, then we won't be able to send more */ | |
/* message to any client */ | |
} | |
zmq_close (socket); zmq_ctx_destroy (ctx); | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment