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 ')

 

 

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

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

没有水杯和雨伞的工科男

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值