sockets - Zeromq 哪个套接字应该绑定(bind)到 PubSub 模式

标签 sockets zeromq pyzmq jzmq netmq

我一直在阅读有关 ZeroMQ 的内容,更具体地说是有关 NetMQ 的内容,并且我看到的几乎每个 Pub/Sub 示例都用于绑定(bind)发布者套接字,然后订阅者套接字连接到另一个套接字。

所以我想知道是否可以进行相反的操作,我的意思是绑定(bind)订阅者套接字,然后发布者连接到它。

这可能吗? (我没有在文档中找到任何明确的内容) 使用这种连接策略有什么缺点?

任何帮助都会有用。

最佳答案

是的,您可以反转它,并且使用该连接策略没有任何缺点......只要它适合您的目的。

在 ZMQ 中,“绑定(bind)”和“连接”背后的驱动概念是,一侧通常被认为更可靠(并且通常会有更少的节点),而另一侧被认为更短暂(并且可能有更多的节点)。可靠端将被视为您的“服务器”,您应该在该端bind(), transient 端将被视为您的“客户端”(或客户端s) ,并且您应该在那一侧 connect()

通常,我们认为有一个稳定的“服务器”不断地向许多来来去去的“客户端”订阅者发布信息。这在您看到的示例中有所体现:在 pub 上绑定(bind),在 sub 上连接。

但是,您可以轻松地拥有一个稳定的“服务器”,订阅来自与其连接的许多“客户端”发布商的任何输出,并接受它们在可用时发送的任何信息。在 sub 上绑定(bind),在 pub 上连接。

您也不限于一台服务器,这只是最简单的示例 - 但是,如果您在同一台计算机上运行所有套接字,那么您会受到更大的限制。使用多个套接字绑定(bind)到同一地址会产生冲突,但您可以根据需要将任意多个套接字连接到同一地址。

在许多情况下,通信双方实际上都是为了可靠且长期运行,在这种情况下,将发送信息的节点视为服务器,将接收信息的节点视为客户端是有用的。在这种情况下,我们回到在 pub 上绑定(bind),在 sub 上连接。

关于sockets - Zeromq 哪个套接字应该绑定(bind)到 PubSub 模式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29752338/

相关文章:

c - 如何纠正从客户端读取数据的套接字编程错误?

c - 通过NAT发送和接收UDP数据包

c - 为什么不接受()阻止?

linux - 如何检查进程是否正在运行 - Linux

c++ - 从 IIS 7.5 Web 应用程序调用 Win32 CreateEvent() 失败

python - 非阻塞 zmq 发送/接收并在收到所有回复时进行处理

python - 为 python 安装 zeromq 时遇到问题

Python + ZMQ : Operation cannot be accomplished in current state

c++ - ZMQ : socket_send/recv blocking

python-asyncio - FastAPI如何将ZMQ添加到事件循环