是否可以向 ZeroMQ 添加事件处理以在数据为 received/sent 时采取行动?

Is it possible to add an event handling to ZeroMQ to act when data is received/sent?

我在 Linux Ubuntu 中用 C 创建了两个不相关的守护进程。这些进程处于休眠模式,它们只有在接收到数据时才会醒来,并且执行信号处理程序中实现的操作并再次休眠。

我已经使用 SIGNAL IPC 和消息队列实现了这种通信。在发送消息之前,我发送信号 SIGUSR1 然后发送数据,我为 SIGUSR1 编写了信号处理程序以执行所需的操作。

我想使用 ZeroMQ 实现相同的通信方式,我一直在阅读他们的 指南 以了解 ZeroMQ 是否有任何类型的事件处理或通知方法其他进程,当数据到达时(对于C语言)。

我也提到了以下 link:

Does ZeroMQ have a notification/callback event/message for when data arrives?

但我还是很怀疑

ZeroMQ 是否通知或触发 其他进程一些事件,当新数据已发送时(我不想等待或poll() 直到数据到达,相反,我的守护进程将处于休眠状态,当数据到达时,它将执行其处理程序并再次休眠 )?

如果有人可以对此提供帮助/建议,那就太好了。

没有

在原样状态下,ZeroMQ 既不实现触发器也不实现回调。

为什么?

因为消息传递的核心思想是使用队列,而不是打扰流程的流程,除非流程本身发现询问队列是可行的(使用智能方式,通过 .poll() 测试,或者以一种愚蠢的方式,直接调用 .recv( ZMQ_NOBLOCK ) ),如果有任何消息准备好并等待它们的 post 处理,然后将开始 .recv() 它们来自 ZeroMQ 端线程及其资源并根据它们自己的进程足迹和工作流处理它们。


但是POSIX SIGNAL-s机制改变了游戏规则:

鉴于 ZeroMQ 本身的事实,SIGUSR1 可以提供一个独立的(仅与使用上下文对齐)“ Out-of-Band" 向接收进程发出信号,表明发送进程刚刚编组了一些要处理、发送和传递的通信,因此接收进程可以激活并遵循工具 & .recv() 从 ZeroMQ 传递路径获取数据的方法,尽管事实上 ZeroMQ 机制本身并不提供回调方法。

因此,从这个意义上说,即使是命令式语言实现的算法也能意识到最后一次 ZeroMQ 调用的成功/失败,O/S POSIX 信令层(完全独立于分布式 ZeroMQ 消息传递/信令传递基础设施)可以提供这种寻求的进程间协调方式,旨在甚至在被测进程网络的睡眠/守护进程实例之间工作。