是否可以向 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 消息传递/信令传递基础设施)可以提供这种寻求的进程间协调方式,旨在甚至在被测进程网络的睡眠/守护进程实例之间工作。
我在 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 消息传递/信令传递基础设施)可以提供这种寻求的进程间协调方式,旨在甚至在被测进程网络的睡眠/守护进程实例之间工作。