gpt4 book ai didi

python - 创建一组流媒体和发布者

转载 作者:太空狗 更新时间:2023-10-30 00:18:23 25 4
gpt4 key购买 nike

我有许多节点将使用辅助服务来了解彼此的地址。我希望能够发布信息,以便所有其他节点都能听到。使用 XPUB 套接字不是我想在这里使用的选项,因为我希望分发该系统。

我所尝试的总结起来是:

1 创建一个PUB套接字,

def pub_stream(self):
self.pub = self.context.socket(zmq.PUB)
self.pub.bind(self.endpoint)

2 创建一个 SUB 流,

def sub_stream(self):
ioloop = IOLoop.instance()
socket = self.context.socket(zmq.SUB)
self.sub_stream = ZMQStream(socket, ioloop)
self.sub_stream.on_recv(self.on_message)
self.subs_stream.setsockopt(zmq.SUBSCRIBE, self.topic)

3 在某个时候接收所有其他节点的地址并连接到它们,

# close and restart sub_stream to get rid of any previous connections
for endpoint in endpoints:
self.sub_stream.connect(endpoint)

不过,on_message 回调中没有传递任何消息。我正在做的事情是否正确?如果不正确,什么是实现我想要实现的目标的更好方法?

最佳答案

无论您决定使用何种路由,您都至少需要一个固定地址才能连接,除非您可以访问多播等。

我会有一个简单的 X(pub/sub) 代理作为我的独立发现网络,允许新节点根据主题决定哪些其他节点感兴趣。

简单版

  • 创建一个 XSUB/XPUB 代理,每端都有一个固定地址(DNS 等)
  • 节点启动
    • 连接到代理的XSUB端口并广播其主题、地址和数据端口
    • 连接到 XPUB 端口并订阅感兴趣的节点主题
      • 根据返回的连接信息,它根据连接信息将其数据套接字连接到节点的数据套接字。

可靠版本

  • 使用负载平衡器/虚拟 IP 添加多个发现代理以涵盖容错等。
  • 节点应该在定时器上发送发现消息
    • 允许后期加入节点连接
    • 允许连接的节点发现失败的节点(除了依赖 tcp 超时)

混合版

I reality/production 我使用 zeromq 以及任何其他(更合适的)可用服务。这样我就不会试图重新发明轮子(用于发现)而只是 zeromq 用于订阅/数据工作。

例如,如果我使用云提供商将我的系统分布在许多地区,为什么不使用他们提供的发现服务。

AWS(作为一个混合示例)

对于 AWS,我使用以下组件来实现发现/可靠性/故障转移

  • 带有健康检查的 Route53 (DNS)
  • 云 map (DNS ish)
  • 弹性负载均衡器(任何自定义发现服务的前端)

关于python - 创建一组流媒体和发布者,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55169061/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com