import zmq
context = zmq.Context()
socket = context.socket(zmq.REP)
socket.bind("tcp://*:5555")
message = socket.recv()
print "message from client:", message
# Send reply back to client
socket.send("World")
client.py
import zmq
context = zmq.Context()
print "Connecting to server..."
socket = context.socket(zmq.REQ)
socket.connect ("tcp://localhost:5555")
socket.send ("Hello")
message = socket.recv()
print "Received reply: ", message
运行结果:
$ python server.py
message from client: Hello
$ python client.py
Connecting to server...
Received reply: World
一个解决了我很多疑问的网址:
http://www.searchtb.com/2012/08/zeromq-primer.html
其中说明了:
a) 服务端和客户端无论谁先启动,效果是相同的,这点不同于Socket。
b) 在服务端收到信息以前,程序是阻塞的,会一直等待客户端连接上来。
c) 服务端收到信息以后,会send一个“World”给客户端。值得注意的是一定是client连接上来以后,send消息给Server,然后 Server再rev然后响应client,这种一问一答式的。如果Server先send,client先rev是会报错的。
d) ZMQ通信通信单元是消息,他除了知道Bytes的大小,他并不关心的消息格式。因此,你可以使用任何你觉得好用的数据格式。Xml、Protocol Buffers、Thrift、json等等。