之前已经讲过,zeroMQ是可以多对多的,但需要成对匹配才行,即多个发布端都是同一种模式,而这里要涉及到的是,多个发布端模式不统一的情况。
文中先给出了一个比较"脏"的处理方式:
import zmq
import time
context = zmq.Context()
receiver = context.socket(zmq.PULL)
receiver.connect("tcp://localhost:5557")
subscriber = context.socket(zmq.SUB)
subscriber.connect("tcp://localhost:5556")
subscriber.setsockopt(zmq.SUBSCRIBE, "10001")
while True:
while True:
try:
rc = receiver.recv(zmq.NOBLOCK)#这是非阻塞模式
except zmq.ZMQError:
break
while True:
try:
rc = subscriber.recv(zmq.NOBLOCK)
except zmq.ZMQError:
break
显然,如此做既不优雅,还有出现单来源循环不止,另一来源又得不到响应的状况。
自然,官方也做了相应的封装,给了一个相对优雅的实现:
import zmq
context = zmq.Context()
receiver = context.socket(zmq.PULL)
receiver.connect("tcp://localhost:5557")
subscriber = context.socket(zmq.SUB)
subscriber.connect("tcp://localhost:5556")
subscriber.setsockopt(zmq.SUBSCRIBE, "10001")
poller = zmq.Poller()
poller.register(receiver, zmq.POLLIN)
poller.register(subscriber, zmq.POLLIN)
while True:
socks = dict(poller.poll())
if receiver in socks and socks[receiver] == zmq.POLLIN:
message = receiver.recv()
if subscriber in socks and socks[subscriber] == zmq.POLLIN:
message = subscriber.recv()
这种方式采用了平衡兼顾的原则,实现了类似于同一模式多发布端推送的"平衡队列"功能。
(未完待续)
分享到:
相关推荐
zeromq-2.1.7 是 ZeroMQ 的一个较早版本,ZeroMQ 是一个开源的消息中间件,它提供了一种高效、灵活的框架来构建分布式应用。在Linux环境中,ZeroMQ通过消息队列机制实现了进程间的通信,使得数据可以在不同程序之间...
在构建分布式计算系统时,Apache Storm是一个非常关键的组件,尤其在实时数据处理领域。这里提供的四个压缩包文件,Python-2.6.6.tar.bz2、zeromq-3.2.5.tar.gz、jzmq.tar.gz以及storm-0.8.0.zip,都是与Storm搭建和...
zeromq-4.0.3.tar.gz 是一个包含了 ZeroMQ 4.0.3 版本源代码的压缩文件。ZeroMQ,也被称为“零消息队列”或“0MQ”,是一个开源的消息中间件,它提供了一种高效、灵活且可扩展的方式来处理分布式系统中的数据通信。...
zeromq-4.2.3.tar.gz 是ZeroMQ 4.2.3版本的源代码包,这个稳定版本确保了良好的兼容性和可靠性。 首先,让我们深入了解ZeroMQ的核心概念和功能: 1. **套接字(Sockets)**:在ZeroMQ中,套接字不仅仅是传统网络...
zeromq还支持更复杂的模式,例如通过多线程或进程实现并发处理,通过代理(broker)实现更大规模的分布式通信。其高性能和轻量级的特性使得它在大数据、物联网、实时系统等领域有着广泛的应用。 总的来说,zeromq-...
这些套接字支持多种消息模式,包括请求/响应、发布/订阅、推送/拉取以及对等模式,使得开发者可以轻松地处理点对点、一对多和多对多的通信场景。 zeromq的安装过程一般包括解压、配置、编译和安装四个步骤: 1. **...
zeromq-4.1.3 是一个针对 ZeroMQ 的特定版本的开发工具包,ZeroMQ 是一个开源的消息中间件库,它为分布式计算提供了一种高性能、轻量级的通信框架。ZeroMQ 提供了多种编程语言的绑定,使得开发者能够方便地在不同的...
这个“zeromq-4.3.4.tar.gz”文件是0MQ库的4.3.4稳定版本,发布于2021年1月17日。下面我们将深入探讨0MQ的核心特性、主要功能以及如何使用这一版本。 1. **0MQ简介** - 0MQ不是一个传统的消息队列系统,而是一种在...
官方离线安装包,测试可用。使用rpm -ivh [rpm完整包名] 进行安装
- **实时数据流处理**:在大数据应用中,0MQ可作为实时数据管道,将数据流快速分发到多个处理器。 - **物联网(IoT)应用**:在设备间的通信中,0MQ可以提供低延迟的消息传递,确保指令的及时执行。 总的来说,0MQ是...
zeromq是一个强大的开源消息中间件,它提供了一种高效、灵活且可扩展的方式来处理分布式系统中的消息通信。zeromq的核心理念是提供一个抽象层,使得开发者可以专注于编写业务逻辑,而无需关心底层网络通信的复杂性。...
标题中的"zeromq-4.2.0.tar.zip"是指ZeroMQ库的4.2.0版本,它被封装在一个ZIP压缩包中,而内部包含的文件是tar归档格式。ZeroMQ是一个开源的消息中间件,它提供了一个高级的消息队列模型,允许应用程序之间进行高效...
ZMQ(以下ZeroMQ简称ZMQ)是一个简单好用的传输层,像框架一样的一个socket library,他使得Socket编程更加简单、简洁和性能更高。是一个消息处理队列库,可在多个线程、内核和主机盒之间弹性伸缩。
ZeroMQ是一个网络通讯库,其主要用来为分布式应用程序开发提供进程间通信(此处的进程既可以是同一台机器上的两个进程也可以是不同机器上的两个进程)。ZeroMQ的特点在于灵活的通信手段和丰富的连接模型,并且它可以...
ZeroMQ是一个网络通讯库,其主要用来为分布式应用程序开发提供进程间通信(此处的进程既可以是同一台机器上的两个进程也可以是不同机器上的两个进程)。ZeroMQ的特点在于灵活的通信手段和丰富的连接模型,并且它可以...
这个“zeromq-4.1.0-rc1.zip”压缩包包含了ZeroMQ 4.1.0版本的源代码,这是一个预发布版本(Release Candidate),意味着它是正式版发布前的最后一个测试版本。 ZeroMQ的核心概念是提供一种抽象的网络通信层,允许...
通过使用高效的I/O模型,zeromq可以在单个线程中处理多个连接和请求,降低了线程切换的开销,从而提升了系统的并发性和性能。这对于高并发的应用场景尤其有利。 此外,提到配合msgpack使用,msgpack是一种轻量级的...
在Storm中,零MQ作为数据传输的基础,它支持发布/订阅、请求/响应以及推拉等多种消息模式,使得Storm能够有效地处理实时数据流并确保数据的可靠传输。版本3.12.5是该库的一个稳定版本,可能包含了一些性能优化和bug...
这个“zeromq-4.0.1.tar.gz”文件是ZeroMQ的4.0.1版本源代码包,适用于那些需要在网络通信、并发处理或构建微服务架构的开发者。由于从官方网站下载可能速度较慢,此压缩包提供了方便的下载渠道。 ZeroMQ的核心特性...
无论是构建大规模的分布式系统,还是在本地多进程间进行快速数据交换,它都能提供一个简洁且高效的解决方案。通过阅读提供的资源,如readme.txt,开发者可以更好地理解这个版本的特性,并将其成功集成到他们的项目中...