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

本文探讨了在Python的ZMQ PUB/SUB模式下,发布者使用.bind()方法和订阅者使用.connect()方法的典型用法,并提出疑问:是否可以互换它们的角色。通过对比两种情况——默认设置(发布者.bind(),订阅者.connect())和修改后的设置(发布者.connect(),订阅者.bind()),发现两者都能正常工作,但详细解释了两者的本质区别,bind()通常用于创建服务器端监听连接,而.connect()则用于客户端建立连接。
摘要由CSDN通过智能技术生成

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
zmq的push和pub通讯方式如下: 1. Push- Pull 模式 Push- Pull 模式是一种简单的分布式消息传递模式,其中一个进程将消息推送给另一个进程。在这种模式下,一方只能发出消息,而另一方只能接收消息。 示例代码: ``` # Push import zmq context = zmq.Context() socket = context.socket(zmq.PUSH) socket.bind("tcp://*:5555") # 发送消息 for i in range(5): message = "Message %s" % i socket.send(message.encode("utf-8")) # Pull import zmq context = zmq.Context() socket = context.socket(zmq.PULL) socket.connect("tcp://localhost:5555") # 接收消息 while True: message = socket.recv() print("Received message: %s" % message.decode("utf-8")) ``` 2. Pub- Sub 模式 Pub- Sub 模式是一种发布- 订阅模式,其中一个进程可以发布消息,而其他进程可以订阅并接收这些消息。在这种模式下,发布者(pub)不知道谁将接收消息,而订阅者(sub)也不知道消息来自哪里。 示例代码: ``` # Pub import zmq import time context = zmq.Context() socket = context.socket(zmq.PUB) socket.bind("tcp://*:5555") # 发送消息 for i in range(5): topic = "Topic %s" % (i % 3) message = "Message %s" % i socket.send_multipart([topic.encode("utf-8"), message.encode("utf-8")]) time.sleep(1) # Sub import zmq context = zmq.Context() socket = context.socket(zmq.SUB) socket.connect("tcp://localhost:5555") # 订阅消息 socket.setsockopt(zmq.SUBSCRIBE, b"Topic 1") # 接收消息 while True: [topic, message] = socket.recv_multipart() print("Received message: %s, topic: %s" % (message.decode("utf-8"), topic.decode("utf-8"))) ``` 在以上代码中,订阅者只订阅了“Topic 1”的消息,所以只会收到这个主题的消息。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值