使用 ZeroMQ STREAM 套接字检测套接字连接

Detecting socket connection using ZeroMQ STREAM sockets

我正在构建一个新的应用程序,该应用程序从许多外部设备接收数据,并且需要将其提供给许多不同的组件。 ZeroMQ 似乎是专门为我的架构的 "data bus" 方面构建的。

我最近发现 zmq STREAM 套接字可以连接到本机 TCP 套接字和 send/received 消息。自始至终使用zmq有很大的吸引力,但我有一个问题,我不知道如何解决。

我的一台设备需要设置。也就是说,我将一个套接字连接到它,向它发送一些配置信息,然后坐等它向我发送数据。该设备还具有 "reset" 功能(在某些情况下很有用),需要重新发送配置信息。这样做取决于对套接字接口的 setup/tear-down 阶段的可见性。我需要知道何时建立新连接,以便发送必要的配置消息。

zmq 似乎是故意设计来让我不了解这些知识的。有没有办法做我想做的事?或者我应该为此接口使用常规套接字吗?

嗯,事实证明阅读精美手册(的正确版本)可以提供指导。

When a connection is made, a zero-length message will be received by the application. Similarly, when the peer disconnects (or the connection is lost), a zero-length message will be received by the application.

我想剩下的就是消除连接和断开之间的歧义。仍在寻求社区的建议,如果其他人以前处理过这种情况。

根据您自己的回答,我会犹豫依赖零长度 connect/disconnect 消息作为您的整个策略 - 这似乎不必要地脆弱。从你的问题中我不清楚哪一端是持久的,哪一端需要配置信息,但我希望一端 知道 它正在重置和重新连接,那一端 需要 来自对等方的配置信息,因此它应该在需要时通过消息向请求它,对等方用请求的信息响应该消息。

如果对等点在收到其他消息之前还没有所需的配置信息,它可以排队等待该工作,也可以响应需要配置,然后让网络的其余部分适当地处理该需求。

你不需要 stream/tcp 套接字来实现它,它应该与更标准的 ZMQ 套接字类型一起工作,你只需要在你的应用程序中构建健壮性而不是试图从TCP/socket 次操作。

如果我没有理解您的意思,并且我的建议由于某种原因行不通,您将必须提供有关您的网络拓扑的更多具体信息,以便其他人了解什么是合适的解决方案.