commit c8f56b8b522d885b0075f4026c816217230ed893 Author: Vincent Batts Date: Mon Jul 16 13:52:58 2012 -0400 Initial setup of client/server messaging diff --git a/client/Makefile b/client/Makefile new file mode 100644 index 0000000..782faae --- /dev/null +++ b/client/Makefile @@ -0,0 +1,9 @@ +#CXXFLAGS += -fpermissive +LDFLAGS += -lzmq + +all: main + + +clean: + rm -rf main *~ + diff --git a/client/main.cpp b/client/main.cpp new file mode 100644 index 0000000..e873a12 --- /dev/null +++ b/client/main.cpp @@ -0,0 +1,32 @@ +/* + * + * http://api.zeromq.org/2-2:zmq + * + */ + +#include +#include +#include + + +int main(int ac, char** av) +{ + int threads = 2; + zmq::context_t ctx (threads); + + if (!ctx) { + std::cout << "zmq_init() failed" << std::endl; + return 1; + } + zmq::socket_t s (ctx, ZMQ_REQ); + s.connect ("tcp://localhost:5555"); + zmq::message_t request (10); + memset (request.data (), 0, request.size ()); + s.send (request); + + // wait for a reply + zmq::message_t reply; + s.recv (&reply); + + return 0; +} diff --git a/server/Makefile b/server/Makefile new file mode 100644 index 0000000..28a76b1 --- /dev/null +++ b/server/Makefile @@ -0,0 +1,9 @@ +#CXXFLAGS += -fpermissive +LDFLAGS += -lzmq -lpthread + +all: main + + +clean: + rm -rf main *~ + diff --git a/server/main.cpp b/server/main.cpp new file mode 100644 index 0000000..0acaa73 --- /dev/null +++ b/server/main.cpp @@ -0,0 +1,46 @@ + +#include +#include +#include +#include +#include + +void *worker_routine (void *arg) +{ + zmq::context_t *ctx = (zmq::context_t*) arg; + + zmq::socket_t s (*ctx, ZMQ_REP); + s.connect ("inproc://workers"); + + while (true) { + zmq::message_t request; + s.recv (&request); + + sleep (1); + + zmq::message_t reply (10); + memset (reply.data (), 0, reply.size ()); + s.send (reply); + } +} + +int main(int ac, char** av) { + zmq::context_t ctx (1); + + zmq::socket_t workers (ctx, ZMQ_XREQ); + workers.bind ("inproc://workers"); + + zmq::socket_t clients (ctx, ZMQ_XREP); + clients.bind ("tcp://lo:5555"); + + + for (int i = 0; i != 10; i++) { + pthread_t worker; + int rc = pthread_create (&worker, NULL, worker_routine, (void*) &ctx); + assert (rc == 0); + } + + zmq::device (ZMQ_QUEUE, clients, workers); + + return 0; +}