ZeroMQ 看起来像是一套嵌入式的网络链接库,但工作起来更像是一个并发式的框架.它提供的套接字可以在多种协议中传输消息,如线程间\进程间\TCP\广播等.
你可以使用套接字构建多对多的连接模式,如<1>扇出\<2>发布-订阅\<3>任务分发\<4>请求-应答等.ZeroMQ 的快速足以胜任集群应用产品.它的异步I/O机制让你能够构建多核应用程序,完成异步消息处理任务.
我们从简单的代码开始,一段传统的 Hello World 程序.我们会创建一个客户端和一个服务端,客户端发送 Hello 给服务端,服务端返回 World.下文是 Python 语言编写的服务端,它在 5555 端口打开一个 ZeroMQ 套接字,等待请求,收到后应答 World.)
#
# Hello World server in Python
# Binds REP socket to tcp://*:5555
# Expects "Hello" from client, replies with "World"
#
import zmq import time
context = zmq.Context()
socket = context.socket(zmq.REP)
socket.bind("tcp://*:5555")
while True:
# Wait for next request from client message = socket.recv()
print "Received request: ", message
# Do some 'work' time.sleep (1) # Do some 'work'
# Send reply back to client socket.send("World")
客户端代码:
#
# Hello World client in Python
# Connects REQ socket to tcp://localhost:5555
# Sends "Hello" to server, expects "World" back
#
import zmq
context = zmq.Context()
# Socket to talk to server
print "Connecting to hello world server…"
socket = context.socket(zmq.REQ)
socket.connect ("tcp://localhost:5555")
# Do 10 requests, waiting each time for a response
for request in range (10):
print "Sending request ", request,"…"
socket.send ("Hello")
# Get the reply. message = socket.recv()
print "Received reply ", request, "[", message, "]"
解释几个常用函数,详细应该看AAuto标准库.
context = zmq.Context() #创建上下文
socket = context.socket(zmq.REQ) #创建套接字,不同的后缀指定不同的模式
message = socket.recv()
#接收并返回一个字符串,这个函数内部实际上是创建了一个默认的消息对象然后调用 responder.recvMsg()
socket.send("World") #发送字符串或 raw.malloc() 分配的缓冲区对象