写在开始
最近有在看一些消息队列的东西,偶然之间找到了一个据说是速度最快的消息队列,这个就是我要说的这个ZeroMQ,使用难度也不是很高,但是这个似乎只是封装了一层网络层,所以有一些消息队列的逻辑还是要自己写了,介绍一下使用方法,当然我只介绍Python版本的那个.
使用方法
导入zmq包然后创建一个Context
对象,然后再使用内部的socket
函数来建立连接.
介绍一下ZeroMQ里面的几种状态:
状态 | 枚举名 | 备注 |
---|---|---|
REQ | zmq.REQ | 绑定一个服务端地址,作为客户端 |
REP | zmq.REP | 绑定一个本地IP的一个端口,作为服务端 |
PUB | zmq.PUB | 绑定一个本地IP的一个端口,作为服务端 |
SUB | zmq.SUB | 绑定一个服务端地址,作为客户端 |
Push | zmq.PUSH | 绑定一个服务端地址,作为客户端 |
Pull | zmq.PULL | 绑定一个本地IP的一个端口,作为服务端. |
这些都是传入socket
的状态,表明这个对象应该用哪个模式.
示例
# server
import zmq
context = zmq.Context()
socket = context.socket(zmq.REP)
socket.bind("tcp://0.0.0.0:5555")
while True:
message = socket.recv()
print ("Received request: ", message)
socket.send("World")
# client
import zmq
context = zmq.Context()
print ("Connecting to server...")
socket = context.socket(zmq.REQ)
socket.connect ("tcp://localhost:5555")
for request in range (1,10):
print ("Sending request ", request,"...")
socket.send ("Hello")
message = socket.recv()
print ("Received reply ", request, "[", message, "]")
介绍一个基本的就行了,基本用法就是这样,新建一个Context
对象,然后用里面的socket
方法传入一个状态,返回一个socket对象,然后调用connect
方法来连接或者用bind
方法来绑定一个地址,最后connect
那一部分用socket的send
方法来发送数据,bind
那一部分用recv
方法来接收数据,就是这样.
一点注意事项
服务端那一部分每次接收到客户端的数据之后只能使用一次send
方法返回给客户端数据,第二次就会出错,应该是本身机制就是只让返回一次吧,阻止长连接.
写在最后
这个东西还是挺好用的,不只是用来建立一个消息队列,就算是自己用来建立一个网络通讯也很简单,因为底层封装了很多东西,方便在上层直接发送数据,而且这个还支持多种语言,这样子用的话跨语言使用也是很方便的.