python使用zmq实现发布订阅模式
时间: 2024-05-25 11:05:38 浏览: 217
ZMQ是一个高效的消息传递库,支持多种传输协议,包括TCP、UDP、inproc等。它的广泛应用领域包括分布式系统、高性能计算、实时数据处理等。
ZMQ提供了多种通信模式,其中发布订阅模式是其中之一,用于多个订阅者同时订阅同一个主题的消息。下面是使用ZMQ实现发布订阅模式的Python代码示例。
首先,需要安装ZMQ库。可以使用pip命令进行安装:
```
pip install pyzmq
```
然后,在发布者端,需要创建一个ZMQ的上下文对象,用于创建socket。然后,创建一个PUB类型的socket,并绑定到指定的地址和端口:
```python
import zmq
context = zmq.Context()
socket = context.socket(zmq.PUB)
socket.bind("tcp://*:5555")
```
在订阅者端,也需要创建一个ZMQ的上下文对象,用于创建socket。然后,创建一个SUB类型的socket,并连接到发布者的地址和端口:
```python
import zmq
context = zmq.Context()
socket = context.socket(zmq.SUB)
socket.connect("tcp://localhost:5555")
```
订阅者还需要指定要订阅的主题,可以使用socket的subscribe方法来实现:
```python
topic = "news"
socket.subscribe(topic.encode())
```
发布者可以使用socket的send方法来发送消息,并指定消息的主题:
```python
topic = "news"
message = "latest news"
socket.send_multipart([topic.encode(), message.encode()])
```
订阅者可以使用socket的recv方法来接收消息:
```python
message = socket.recv_multipart()
topic = message[0].decode()
content = message[1].decode()
print(f"Received message: {content} under topic {topic}")
```
完整的示例代码如下:
Publisher:
```python
import zmq
context = zmq.Context()
socket = context.socket(zmq.PUB)
socket.bind("tcp://*:5555")
while True:
topic = input("Enter topic: ")
message = input("Enter message: ")
socket.send_multipart([topic.encode(), message.encode()])
```
Subscriber:
```python
import zmq
context = zmq.Context()
socket = context.socket(zmq.SUB)
socket.connect("tcp://localhost:5555")
topic = input("Enter topic to subscribe: ")
socket.subscribe(topic.encode())
while True:
message = socket.recv_multipart()
topic = message[0].decode()
content = message[1].decode()
print(f"Received message: {content} under topic {topic}")
```
阅读全文