写在开始

最近有在看一些消息队列的东西,偶然之间找到了一个据说是速度最快的消息队列,这个就是我要说的这个ZeroMQ,使用难度也不是很高,但是这个似乎只是封装了一层网络层,所以有一些消息队列的逻辑还是要自己写了,介绍一下使用方法,当然我只介绍Python版本的那个.

使用方法

导入zmq包然后创建一个Context对象,然后再使用内部的socket函数来建立连接.

介绍一下ZeroMQ里面的几种状态:

状态枚举名备注
REQzmq.REQ绑定一个服务端地址,作为客户端
REPzmq.REP绑定一个本地IP的一个端口,作为服务端
PUBzmq.PUB绑定一个本地IP的一个端口,作为服务端
SUBzmq.SUB绑定一个服务端地址,作为客户端
Pushzmq.PUSH绑定一个服务端地址,作为客户端
Pullzmq.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方法返回给客户端数据,第二次就会出错,应该是本身机制就是只让返回一次吧,阻止长连接.

写在最后

这个东西还是挺好用的,不只是用来建立一个消息队列,就算是自己用来建立一个网络通讯也很简单,因为底层封装了很多东西,方便在上层直接发送数据,而且这个还支持多种语言,这样子用的话跨语言使用也是很方便的.

Last modification:January 27th, 2020 at 01:39 pm