Request/Reply pattern
Most basic pattern is client/server model, where client sends a request and server replies to the request.
There is one difference from zmq.PAIR and other type of ZMQ sockets.
ZMQ REQ sockets can connect to many servers.
The requests will be interleaved or distributed to both the servers.
With socket zmq.PAIR, you could send any number of messages among connected peers or client/server.
socket zmq.REQ will block on send unless it has successfully received a reply back.
socket zmq.REP will block on recv unless it has received a request.
Each Request/Reply is paired and has to be successful.
#reqrep_server.py
#Provide port as command line argument to run server at two different ports.
import zmq
import time
import sys
port = "5556"
if len(sys.argv) > 1:
port = sys.argv[1]
int(port)
context = zmq.Context()
#Server is created with a socket type “zmq.REP” and is bound to well known port.
socket = context.socket(zmq.REP)
socket.bind("tcp://*:%s" % port)
while True:
# Wait for next request from client
# It will block on recv() to get a request before it can send a reply.
message = socket.recv()
print "Received request: ", message
time.sleep (1)
socket.send("World from %s" % port)
# reqrep_client.py
# Provide two ports of two different servers to connect to simultaneously.
import zmq
import sys
port = "5556"
if len(sys.argv) > 1:
port = sys.argv[1]
int(port)
if len(sys.argv) > 2:
port1 = sys.argv[2]
int(port1)
#Client is created with a socket type “zmq.REQ”. You should notice that the same socket can connect to two different servers.
context = zmq.Context()
print "Connecting to server..."
socket = context.socket(zmq.REQ)
socket.connect ("tcp://localhost:%s" % port)
if len(sys.argv) > 2:
socket.connect ("tcp://localhost:%s" % port1)
# You have to send a request and then wait for reply.
# Do 10 requests, waiting each time for a response
for request in range (1,10):
print "Sending request ", request,"..."
socket.send ("Hello")
# Get the reply.
message = socket.recv()
print "Received reply ", request, "[", message, "]"
# Executing the scripts:
python reqrep_server.py 5546
python reqrep_server.py 5556
python reqrep_client.py 5546 5556
# Output:
# server-1
(D:\anaconda) C:\Users\admin\Desktop\opt>python reqrep_server.py 5546
Received request: Hello
Received request: Hello
Received request: Hello
Received request: Hello
Received request: Hello
# server-2
(D:\anaconda) C:\Users\admin\Desktop\opt>python reqrep_server.py 5556
Received request: Hello
Received request: Hello
Received request: Hello
Received request: Hello
# client
(D:\anaconda) C:\Users\admin\Desktop\opt>python reqrep_client.py 5546 5556
Connecting to server...
Sending request 1 ...
Received reply 1 [ World from 5546 ]
Sending request 2 ...
Received reply 2 [ World from 5556 ]
Sending request 3 ...
Received reply 3 [ World from 5546 ]
Sending request 4 ...
Received reply 4 [ World from 5556 ]
Sending request 5 ...
Received reply 5 [ World from 5546 ]
Sending request 6 ...
Received reply 6 [ World from 5556 ]
Sending request 7 ...
Received reply 7 [ World from 5546 ]
Sending request 8 ...
Received reply 8 [ World from 5556 ]
Sending request 9 ...
Received reply 9 [ World from 5546 ]
转载于:https://blog.51cto.com/f1yinsky/1950259