设为首页 收藏本站
查看: 1546|回复: 0

[经验分享] 了解saltstack的通信协议zeromq(二) 转

[复制链接]

尚未签到

发表于 2018-1-4 06:45:10 | 显示全部楼层 |阅读模式
  上文讨论了PAIR/PAIR,REQ/REP两种模式,现在看看PUB/SUB和PUSH/PULL模式。
  PUB/SUB:发布订阅模式,跟我们订阅新闻类似的,采用异步IO,多对多模式,如果没有订阅,服务端发送的消息直接丢弃掉。
DSC0000.jpg

  pub_server.py
import zmqimport randomimport sysimport time port = "5556"if len(sys.argv) > 1:        port =  sys.argv[1]        int(port) 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 "%d %d" % (topic, messagedata)        socket.send("%d %d" % (topic, messagedata))        time.sleep(1)  sub_client.py
import sysimport timeimport zmq port = "5556"# Socket to talk to servercontext = zmq.Context()socket = context.socket(zmq.SUB) print "Collecting updates from weather server..."socket.connect("tcp://localhost:%s" % port)   #socket.set(zmq.UNSUBSCRIBE, messagedata)topicfilter = "10001"socket.set(zmq.SUBSCRIBE, topicfilter) #Process 5 updatestotal_value = 0#for update_nbr in range (5):while True:        string = socket.recv()        topic, messagedata = string.split()#       total_value += int(messagedata)        print topic, messagedata        time.sleep(1)  zmq.SUBCRIBE是用来指明订阅某种消息,这里订阅的是出现10001的信息
  PUSH/PULL:任务分发模式,主要用于分布式计算的,将很多个任务分发到worker,然后worker将计算结果发送到结果收集器。
DSC0001.jpg

  producer.py
import timeimport zmqimport random context = zmq.Context()sender = context.socket(zmq.PUSH)sender.bind('tcp://*:5557') # sync start of batch# be sure all worker connect successsink = context.socket(zmq.PUSH)sink.connect('tcp://0.0.0.0:5558')print 'Press Enter when the workers are ready:'_ = raw_input()print 'Sending tasks to workers...'sink.send(b'0')  for task_nbr in xrange(1000000):        workload = random.randint(1,10)        sender.send_string(u'%i' % workload) for i in range(10):        sender.send_string(u'0')time.sleep(1)  consumer.py
import sysimport timeimport zmq context = zmq.Context() # Socket to recevie messages onreceiver = context.socket(zmq.PULL)receiver.connect('tcp://localhost:5557') # socket to send messagessender = context.socket(zmq.PUSH)sender.connect('tcp://localhost:5558') while True:        a_str = receiver.recv_string()        num = int(a_str)        if num % 2 == 0 or a_str == u'0':                sender.send_string(a_str)  result.py
import sysimport timeimport zmq context = zmq.Context()# Socket to receive messages onreceiver = context.socket(zmq.PULL)receiver.bind("tcp://*:5558") # Wait for start of batchs = receiver.recv()sum = 0flag = 0# Start our clock nowtstart = time.time()while True:        a_str = receiver.recv_string()        num = int(a_str)        sum += num        if a_str == '0':                flag += 1        if flag == 10:                break tend = time.time()tdiff = tend - tstarttotal_msec = tdiff * 1000print "Total elapsed time: %d msec" % total_msec
DSC0002.jpg

  这个结果并不精确,分别是启动1个、2个、3个、4个consumer.py进程的测试结果,说明计算缩短了时间。
  Queue,Forwarder,Streamer分别是REQ/REP、PUB/SUB、PUSH/PULL的代理,用于代理不同网段的机器。
  关于代理的用法,这里不讲述。请参考下面地址。

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-431383-1-1.html 上篇帖子: Saltstack生产案例之系统初始化 下篇帖子: SaltStack初探
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表