我是靠谱客的博主 迷你蜡烛,最近开发中收集的这篇文章主要介绍zmq 之 ipc 通信,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

在写zeromq 的程序的时候,我们需要设定的是ipc 的地址,这个时候需要设定ipc地址,是基于当前文件夹进行设定的,也就是说,不同文件夹下的ipc  即使写了相同的文件的名字。还是不能够通信。

如下图所示,我才用的是pub-xsub-xpub-sub 的模式,其中sub1 和 xpub 在相同的文件夹下,其能够通过正常ipc 进行通信,但是,sub2 不与xpub 在同一个文件夹下的情况的时候,其就不能够相互通信了

 

这种情况是你从来没有启动过任何文件的情况下,实际上zeromq会根据你生成main.ipc 文件所在位置来确定的

当我运行了我的proxy 的这个文件的时候,系统就帮我生成了一个main  这个就是我的进程文件所在的位置,这个时候,与此文件所在的相同的文件夹下的zeromq的套接字才能够与我通信

 

 

 

 

 

三个文件:

1  pub 文件



import socket
import  time


if __name__=='__main__':
    #需要绑定的地址
    exp_id_server="tcp://115.156.162.76:6000"
    # exp_id_server="ipc://sub_server_proxy"


    #zeromq experiment part
    import zmq
    context = zmq.Context()
    socketzmqpub = context.socket(zmq.PUB)
    socketzmqpub.connect(exp_id_server)





    while  True:

        v_data = 123
        time.sleep(1)
        print('v_data 是多少?',v_data)
        #可以每次系统改变,都重启一次数据解析的脚本,如何异步不阻塞的对多个不同的客户端进行
        socketzmqpub.send(b'expid'+struct.pack('!f',v_data))





 

 

2 xsub-xpub 文件



import zmq



def broker_proxy():
    #创建本进程使用的上下文
    context = zmq.Context()

    #建立sub 套接字以供远端的多个不同子系统的pub 进行链接使用
    url =  "tcp://115.156.162.76:6000"
    # url =  "ipc://sub_server_proxy"
    socketsub = context.socket(zmq.SUB)
    socketsub.set_hwm(100000)
    socketsub.bind(url)
    #订阅内容设定为所有的套接字的所有的消息都要订阅
    socketsub.setsockopt(zmq.SUBSCRIBE,''.encode('utf-8'))


    #建立自身的分发系统,采用的是进程间的通信的机制,或者采用的是线程间的通信的机制
    socketpub = context.socket(zmq.PUB)
    socketpub.set_hwm(100000)
    # urlzmq = "tcp://127.0.0.1:6005"
    urlzmq = "ipc://main.ipc"
    socketpub.bind(urlzmq)




    import  time
    numpage=0


    while True:
        response = socketsub.recv()
        # time.sleep(1)
        # response=b'hello world'
        numpage = numpage  + 1
        print(numpage)
        socketpub.send(response)



'''
    这个地方为什么要做一个中介
    因为,
    如果不中介的话,
        1、我的subscribe 端 就要订阅所有的publisher 端
        2、同时,同步的情况也是相对比较麻烦
    如果有中介解决
        1、可以解决同步的问题
        2、其两端的部分,都可以各自变化,不会彼此受到影响
'''
if __name__=='__main__':


    broker_proxy()






 

 

3 sub  文件



import zmq


context = zmq.Context()
url="ipc://main"

socketsub = context.socket(zmq.SUB)
socketsub.connect(url)
socketsub.setsockopt(zmq.SUBSCRIBE,b'')

while True:

    response = socketsub.recv()
    print(response)
    print('we have get one in socket sub 2 ')

 

 

想要测试的同学,可以分别将这三个文件放在不同的文件夹下  看出所在文件夹下的影响

最后

以上就是迷你蜡烛为你收集整理的zmq 之 ipc 通信的全部内容,希望文章能够帮你解决zmq 之 ipc 通信所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(33)

评论列表共有 0 条评论

立即
投稿
返回
顶部