`
pjwqq
  • 浏览: 80831 次
社区版块
存档分类
最新评论

pyzmq的4种模式(PUB/SUB)笔记

阅读更多

    Pub/Sub pattern  发布/订阅模式

发布订阅模式:发布方不用管理发布给哪个订阅方(看到这句话感觉不太好),有2种场景

 

场景2比较常见,多客户端向一个服务端订阅,场景1类似与REP/REQ的多服务器模式,避免单个PUB撑不住,(2个PUB的数据都能收到)

pub-server.py

port = '5556'
pub_server_name = 'pub-server01'

context = zmq.Context()
socket = context.socket(zmq.PUB)
socket.bind('tcp://*:%s'%port)

while True:
	topic = random.randrange(9999,10005)
	messagedata = random.randrange(1,215)-80
	print 'topic:%s messagedata:%s'%(topic,messagedata)
	socket.send('%d %d %s'%(topic,messagedata,pub_server_name))
	time.sleep(1)

 随机发送主题为9999-10005的数据

sub-client.py

#coding=utf-8

import sys
import zmq

port = "5556"
if len(sys.argv) > 1:
    port =  sys.argv[1]
    int(port)
    
if len(sys.argv) > 2:
    port1 =  sys.argv[2]
    int(port1)

# Socket to talk to server
context = zmq.Context()
socket = context.socket(zmq.SUB)

print "Collecting updates from weather server..."
socket.connect ("tcp://localhost:%s" % port)

if len(sys.argv) > 2:
    socket.connect ("tcp://localhost:%s" % port1)

# 本地过滤
topicfilter = "10001"
socket.setsockopt(zmq.SUBSCRIBE, topicfilter)

# Process 5 updates
total_value = 0
for update_nbr in range (5):
    string = socket.recv()
    topic, messagedata,pub_server_name = string.split()
    total_value += int(messagedata)
    print topic, messagedata,pub_server_name

print "Average messagedata value for topic '%s' was %dF" % (topicfilter, total_value / update_nbr)

  客户端只接收主题为10001的数据

PUB输出:

topic:10003 messagedata:7
topic:10000 messagedata:-27
topic:10000 messagedata:37
topic:10001 messagedata:-11
topic:10001 messagedata:-14
topic:9999 messagedata:38

client输出:

10001 -11pub-server01
10001 -14 pub-server01

  

  另外:PUB/SUB是异步的,谁先开后开都行,就是说如果PUB已经开起来发送数据,然后SUB端起来,那么之前的那些数据SUB就收不到了,PUB和SUB逻辑上可以说是解耦的,二者不互相依赖。

  最后是要点:

    1.PUB未与SUB有逻辑上的连接,所以PUB可以很简单的drop掉数据(意思就是只管发)

    2.如果你用的是TCP,然后SUB端要搞点什么比较慢,数据会Queue在PUB那头

    3. 目前版本(最新版) filter(就是主题过滤)是在SUB端的,不是在PUB端,就是说SUB端比较苦逼,要全部收下一堆数据,再慢慢挑,这好像太那个了吧^_^

 

 

4
0
分享到:
评论

相关推荐

    ActiveMQ的处理模式:PTP与PUB/SUB

    总结来说,ActiveMQ的PTP和PUB/SUB模式提供了灵活的消息处理方式,适应不同的业务场景。SpringBoot通过其强大的依赖注入和自动配置能力,使得与ActiveMQ的集成变得简单易行。开发者可以根据实际需求选择合适的消息...

    Redis编程实践【pub/sub】

    在本实践中,我们将深入探讨 Redis 的发布订阅(pub/sub)功能,这是一种轻量级的通信模式,允许发送者(publisher)向多个接收者(subscriber)广播消息,而无需直接了解彼此。 首先,让我们理解 Redis pub/sub 的...

    【原创】C#通过StackExchange使用Redis的PUB/SUB功能

    完整的代码,使用vs2015创建。通过一个64位StackExchange.Redis.dll(开源,1.2.6版),创建客户端,管理和使用Redis的PUB/SUB功能,适合集成进项目使用。 (需正常配置Redis客户端后才可使用)

    WCF发布-订阅(Pub/Sub)服务

    简单的WCF发布-订阅(Pub/Sub)服务的例子

    基于Redis发布订阅(pub/sub)系统实现的前端设备控制框架(java)

    基于Redis发布订阅(pub/sub)系统实现的前端设备控制框架(java)。在基于物联网的应用中,各种前端设备需要能被远程管理,当所有的设备都能直接通过ip地址访问时,设计设备管理系统时,只需要把前端设备当作一个简单的...

    MQ7.0 pub/sub功能初步研究

    MQ7.0是IBM消息队列(Message Queue)的一个重要版本,相较于MQ6.1,它引入了许多新特性和改进,特别是在发布/订阅(pub/sub)功能方面。发布/订阅是一种异步消息传输机制,允许应用程序(发布者)在不关心具体接收...

    Optimizing the Quality of Service for a Pub/Sub System

    Abstract—Publish/Subscribe (Pub/Sub) systems are the middleware which provides the distributed event detection. The increasing requirements from applications have driven Pub/Sub systems to ...

    redis-spring-pub_sub

    标题 "redis-spring-pub_sub" 暗示了我们关注的是如何在Spring框架中使用Redis作为发布/订阅(pub/sub)消息系统。这个主题涵盖了两个主要方面:Redis的发布/订阅功能和Spring对它的集成。 Redis是一个高性能的键值...

    dtalk(Device Talk)基于Redis发布订阅(pub/sub)系统实现的前端设备控制框架(java)

    dtalk就是为了实现上述的目标而开发的一个Redis发布订阅(pub/sub)系统实现的前端设备控制框架,在dtalk框架上,Redis服务器用于提供中转服务。前端设备通过订阅特定的频道接收管理发送的请求消息,执行对应的功能。...

    opcua TSN pub/sub的 demo

    网上关于opcua的demo 具体介绍参见:http://t.csdn.cn/WMEW9 原地址:https://www.kalycito.com/how-to-run-opc-ua-pubsub-tsn/

    hiredis的pub\sub管理代码

    其中,`Pub/Sub(发布/订阅)`是Redis提供的一种消息通信模式,它允许发送者(Publisher)发送消息到频道(Channel),而多个订阅者(Subscriber)可以同时监听并接收这些消息。在本案例中,我们关注的是`hiredis`库...

    用现代C ++编写的高性能pub / sub WebSocket服务器。-C/C++开发

    它着重于高性能和可用性,并实现了发布-订阅模式和主题概念。 Concepts Eventhub是用现代C ++编写的WebSocket消息代理。 它着重于高性能和可用性,并实现了发布-订阅模式和主题概念。 概念主题主题是将消息发布到的...

    qt zmq 的使用:订阅模式:PUB(服务器)/SUB(客户端)

    订阅模式:PUB(服务器)/SUB(客户端) 一个简单的代码示例包含以下内容: 1. 智能指针的使用 2. 线程的使用 3. zmq的使用 这种服务即服务器会不停发送数据,然后客户端对其进行订阅,客户端会收到服务器发送的数据...

    ApachePulsar-分布式pub-sub消息系统

    Apache Pulsar是一款高度可扩展、高性能的分布式发布订阅(pub-sub)消息系统,由Apache Software Foundation维护。作为下一代消息中间件,Pulsar旨在解决传统消息队列系统的局限性,提供更强大的功能和更高的吞吐量...

    iodine-具有Pub / Sub支持的Ruby的HTTP / WebSockets服务器-C/C++开发

    Iodine是用于实时Ruby应用程序的快速并发Web应用程序服务器,具有对WebSockets和Pub / Sub服务的本地支持-但它还有更多。 Iodine是许多facil.io C框架的Ruby包装器,利用C的速度来完成许多常见的Web应用程序任务。 ...

    使用Redis的pubsub技术构建实时消息系统

    Redis是一种高性能的键值数据库,特别适合用于构建实时消息系统,因为它的发布/订阅(pub/sub)模式可以实现实时数据传输。在这个系统中,发布者(pub)发送消息到特定的主题(channel),而订阅者(sub)可以监听并...

    zeromq的pub-sub订阅模式的jave实现

    它支持多种协议,如TCP、IPC、PUB/SUB、REQ/REP等,可以很好地处理高并发和大规模网络通信。 在Java中,我们通常使用jeromq作为zeromq的实现,因为它是官方zeromq库的Java绑定。jeromq提供了与C++版本zeromq接口...

    nodejs-pub-sub-chat-demo:Node.js + Redis PubSub + socket.io

    使用Redis Pub / Sub + socket.io基于Node.js进行聊天基于简单的应用程序,以显示Redis Pub / Sub机制以及Node.js和socket.io。如何使应用程序运行必须已安装并正在运行。 必须安装 npm安装npm运行redis或npm运行套...

    PyPI 官网下载 | google-cloud-pubsub-0.28.4.tar.gz

    Google Cloud Pub/Sub是一种完全托管的消息传递服务,它允许开发者在应用程序之间发送和接收实时消息。Python库“google-cloud-pubsub”则是与这个服务交互的工具,使得Python开发者能够轻松地集成Pub/Sub功能到他们...

    Laravel开发-laravel-pubsub-queue

    Laravel-pubsub-queue是针对Google Cloud Pub/Sub平台的一个队列驱动程序,允许开发者利用Google Cloud的强大功能来管理他们的后台任务。 首先,我们需要了解Google Cloud Pub/Sub的基本概念。Pub/Sub是一个完全...

Global site tag (gtag.js) - Google Analytics