[zeromq-dev] Async client server with multiple sockets

aayush gupta aayushgupta.84 at gmail.com
Thu Sep 26 20:16:59 CEST 2013


Hi,

I am a newbie to using zmq. I am building my client server architecture (C
client/server) as follows.

I have 2 threads in my client and 2 threads in my server.

I create a DEALER socket in Thread 1 of my client and it sends requests to
the server. Thread 2 has a PULL socket and waits for response from the
server. This way Thread 1 can keep sending requests while Thread 2 keeps
processing responses as and when they are available.

On the server side, Thread 1 creates 2 sockets: A ROUTER socket where it
receives requests from clients (with their identities) and a PUSH socket
which it hands over to Thread 2 through which Thread 2 sends responses back
to clients. Since thread 1 never does anything to the PUSH socket, I
believe it should be safe to create both sockets in Thread 1 and hand over
the PUSH socket to the worker thread.

When Thread 1 receives requests from clients, it signals the worker Thread
2 to process the requests. Note, I do not use zmq_proxy for communication
between the 2 server threads. Instead, the content of the message is made
available to Thread 2 through my own mechanism (the content of messages
from clients can be large, hence I cannot pay the penalty of multiple
memcpy's on recv()).

After worker Thread 2 finishes processing, it sends response back to client
using the PUSH socket.
My concern is that if there are multiple clients talking to the server, how
will the worker Thread be able to decide which client to respond to (i.e. I
do not want the worker thread to send replies to wrong clients).

If I were using native socket library, I could have associated the socket
descriptors after accept() with each client and passed this information
from Thread 1 to Thread 2 enabling it to respond to appropriate client. How
do I achieve this behavior using zeroMQ?

Any help would be greatly appreciated.

Thanks,
Aayush
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://lists.zeromq.org/pipermail/zeromq-dev/attachments/20130926/fd1eeed2/attachment.htm>


More information about the zeromq-dev mailing list