正在检测使用ZeroMQ STREAM套接字的套接字连接



我正在构建一个新的应用程序,该应用程序从许多外部设备接收数据,并需要使其可用于许多不同的组件。ZeroMQ似乎是专门为我的体系结构的"数据总线"方面而构建的。

我最近意识到zmqSTREAM套接字可以连接到本机TCP套接字并发送/接收消息。全程使用zmq很有吸引力,但我有一个问题,我不知道如何解决。

我的一个设备需要设置。也就是说,我将一个套接字连接到它,向它发送一些配置信息,然后坐下来等待它向我发送数据。该设备还具有"重置"功能(在某些情况下很有用(,需要重新发送配置信息。要做到这一点,取决于能否看到套接字接口的设置/拆除阶段。我需要知道何时建立了新的连接,这样我就可以发送必要的配置消息。

似乎zmq是故意设计来保护我不受这些知识的影响。有办法做我想做的事吗?或者我应该只使用这个接口的常规套接字吗?

事实证明,阅读(正确版本的(精细手册可能会很有指导意义。

建立连接时,应用程序将收到一条零长度的消息。类似地,当对等方断开连接(或连接丢失(时,应用程序将接收到一条长度为零的消息。

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

根据您自己的答案,我会犹豫是否将零长度连接/断开连接消息作为您的整个策略——这似乎是不必要的脆弱。从您的问题中,我不清楚哪一端是持久的,哪一端需要配置信息,但我希望一端知道它正在重置和重新连接,而该端需要对等端的配置信息,所以它应该在需要时向发出消息,对等端用请求的信息回应。

如果对等端在接收到其他消息之前还没有所需的配置信息,它可以将该工作排队,也可以以配置的需要进行响应,然后拥有所需的其他网络句柄。

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

如果我错过了你的观点,并且我的建议由于某种原因不起作用,你必须提供关于你的网络拓扑结构的更具体的信息,让其他人了解什么是合适的解决方案。

最新更新