欢迎访问宙启技术站
智能推送

Python中的ZMQPUB模式与多个订阅者进行通信

发布时间:2023-12-24 16:56:11

在Python中,使用ZeroMQ(ZMQ)库可以轻松实现发布-订阅模式(PUB-SUB)的通信。在该模式中,一个主题发布者(PUB)发送消息,而多个订阅者(SUB)接收这些消息。

下面是使用ZMQ库在Python中实现PUB-SUB模式,并与多个订阅者进行通信的示例代码:

### 发布者(Publisher)代码:

import zmq

context = zmq.Context()
publisher = context.socket(zmq.PUB)
publisher.bind("tcp://*:5555")  # 绑定socket到地址

while True:
    topic = input("请输入要发布的主题:")
    message = input("请输入要发布的消息:")
    publisher.send_string("{} {}".format(topic, message))

在此代码中,我们首先导入了zmq库。然后,我们创建了一个Context对象和一个PUB类型的socket。我们将socket绑定到地址“tcp://*:5555”上,以便订阅者可以连接到发布者。最后,我们进入一个循环,不断输入要发布的主题和消息,并使用send_string方法将它们发送到订阅者。

### 订阅者(Subscriber)代码:

import zmq

context = zmq.Context()
subscriber = context.socket(zmq.SUB)
subscriber.connect("tcp://localhost:5555")  # 连接到发布者的地址
subscriber.setsockopt_string(zmq.SUBSCRIBE, "")  # 订阅所有主题

while True:
    message = subscriber.recv_string()
    topic, message = message.split(' ', 1)
    print("收到主题: {}  消息: {}".format(topic, message))

在此代码中,我们首先导入了zmq库。然后,我们创建了一个Context对象和一个SUB类型的socket。我们将socket连接到发布者的地址,以便接收发布者发送的消息。然后,我们使用setsockopt_string方法订阅了所有主题,以便接收发布者发送的所有消息。

在一个无限循环中,我们使用recv_string方法接收发布者发送的消息。然后,我们使用split方法将主题和消息分开,并打印接收到的主题和消息。

### 运行示例:

1. 首先,运行发布者代码。

2. 然后,运行多个订阅者代码,每个订阅者可以在不同的终端或命令行窗口中运行。

3. 在发布者终端中,输入要发布的主题和消息。

4. 在订阅者终端中,将看到订阅者接收到的对应主题和消息。

这个示例展示了如何在Python中使用ZeroMQ库实现发布-订阅模式,并与多个订阅者进行通信。您可以根据自己的需求扩展和定制代码,以实现更复杂的发布-订阅通信。