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
_______________________________________________ zeromq-dev mailing list [email protected] http://lists.zeromq.org/mailman/listinfo/zeromq-dev
