我对Linux上的IPC机制有以下要求:
我现在有以下解决方案:
截至目前,该方法工作正常。现在,我试图弄清楚如何向混合中添加一些信号,以便消费者不必旋转读取生产者序列来等待新消息。对于信令部分,我还有一些其他要求:
考虑到这些要求,我消除了一些选择:
selectable
。 我有点茫然,看不到任何其他好的选择。在我看来,UDP多播似乎可以工作。使用者都可以成为多播组的一部分(使用
SO_REUSEADDR
创建套接字),唯一的生产者可以在该组上发送消息以向使用者发出信号。但是,这似乎确实很沉重和详尽。还有其他好的机制可以实现这一目标吗?我愿意直接使用Futex API
(只要有帮助),只要它可以使用select/epoll阻止其他不相关的FD。 最佳答案
我建议发送信号,通过的DBus。当您可以使用已经可以满足您需求的成熟框架时,为什么还要推出自己的IPC?
此页面应该让你开始:
https://dbus.freedesktop.org/doc/dbus-tutorial.html
最后,它包括链接到Qt和GLib库的API。我都没有用过,而是用我自己的基于Boost.ASIO的包装器来包装低级API,尽管这是一项相当艰巨的任务。
https://dbus.freedesktop.org/doc/api/html/
顺便说一句,要发送二进制数据块,您需要在消息中附加DBUS_TYPE_ARRAY
类型为DBUS_TYPE_BYTE
的arg。需要注意的是DBUS_TYPE_STRING
不能包含零个字节或无效的Unicode序列。
更新:最近引起我注意的另一个库称为sd-bus。这里有一个很好的概述和教程:
http://0pointer.net/blog/the-new-sd-bus-api-of-systemd.html
关于c++ - 在Linux上广播IPC,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/42239568/