微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

python – 使用ZMQ PUB与.connect()或.bind()方法有什么区别?

Python ZMQ发布者/订阅者样本模板中,发布者使用.bind()方法,订阅者使用连接到绑定IP地址的.connect()方法.

但是我们可以用另一个替换.bind()和.connect().

我的问题是,下面确定的两个案例有什么区别?
(在这些情况下两个脚本工作正常)

第一种情况,认情况下:

pub1.py:

import zmq
import time
from datetime import datetime

def create_pub_socket():
    context = zmq.Context()
    socket = context.socket(zmq.PUB)
    socket.bind("tcp://127.0.0.1:9002")  # notice
    return socket

def publish(pub_socket):
    message = {
        'data': 'hi my name is benyamin','time': datetime.Now().strftime('%Y-%m-%dT%H:%M:%s')
    }
    pub_socket.send_json(message,0)
    return message

if __name__ == '__main__':
    socket = create_pub_socket()

    while True:
        print('\n')
        print('publisher: ',publish(socket))
        time.sleep(1)

sub1.py:

import zmq

if __name__ == '__main__':
    context = zmq.Context()
    socket = context.socket(zmq.SUB)
    socket.setsockopt(zmq.SUBSCRIBE,"")
    socket.connect("tcp://127.0.0.1:9002")  # notice

    while True:
        data = socket.recv_json()
        print('subscriber: ',data)
        print('\n')

第二种情况,作为修改后的设置,颠倒了.connect()和.bind()方法的使用:

pub2.py:

import zmq
import time
from datetime import datetime

def create_pub_socket():
    context = zmq.Context()
    socket = context.socket(zmq.PUB)
    socket.connect("tcp://127.0.0.1:9002")  # notice
    return socket

def publish(pub_socket):
    message = {
        'data': 'hi my name is benyamin',publish(socket))
        time.sleep(1)

sub2.py:

import zmq

if __name__ == '__main__':
    context = zmq.Context()
    socket = context.socket(zmq.SUB)
    socket.setsockopt(zmq.SUBSCRIBE,"")
    socket.bind("tcp://127.0.0.1:9002")  # notice

    while True:
        data = socket.recv_json()
        print('second subscriber: ',data)
        print('\n')
最佳答案
这里没有差异,但在其他情况下,存在差异取决于您的政策:

即假设有两个客户端(Machine1,Machine2)和一个服务器.
每个客户端必须使用ZMQ发布数据,并且服务器必须从Machine1和Machine2订阅该数据:

> Machine1 – >有一个发布者(与.connect(服务器IP))
> Machine2 – >有一个发布者(与.connect(服务器IP))
>服务器 – >有订阅者(使用.bind(服务器IP /自我IP))

正如您在上述场景中所见,我们在第二种情况下使用(在上述问题中).

[注意]:

> .bind()方法只接受自身IP或127.0.0.1,但.connect()方法可以连接到.bind()方法中定义的每个IP地址:Why doesn’t zeromq work on localhost?
>这是另一个更改.bind()和.connect()的示例:locate:This
-Link

原文地址:https://www.jb51.cc/python/438809.html

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐