如何在嵌入式环境中避免Linux的DBus?

如何在嵌入式环境中避免Linux的DBus?,linux,ipc,dbus,Linux,Ipc,Dbus,我在一个基于Linux的嵌入式项目中工作,该项目使用C/C++和python应用程序。我们需要一种进程间通信(IPC)方法来在这些应用程序之间传输基于JSON的消息。最初,DBus是一个明显的选择,因为它存在于几乎所有的Linux发行版中,并且是非常稳定且经过验证的软件。还有许多编程语言的库。此外,DBus有一个非常精细的许可系统——这是我们项目的一个要求(出于安全原因) 但不幸的是,我们遇到了DBU的一些缺点: 我们遇到了一些稳定性错误,比如在某些特定的拥塞情况下,出现了一些内存泄漏,导致IP

我在一个基于Linux的嵌入式项目中工作,该项目使用C/C++和python应用程序。我们需要一种进程间通信(IPC)方法来在这些应用程序之间传输基于JSON的消息。最初,DBus是一个明显的选择,因为它存在于几乎所有的Linux发行版中,并且是非常稳定且经过验证的软件。还有许多编程语言的库。此外,DBus有一个非常精细的许可系统——这是我们项目的一个要求(出于安全原因)

但不幸的是,我们遇到了DBU的一些缺点:

  • 我们遇到了一些稳定性错误,比如在某些特定的拥塞情况下,出现了一些内存泄漏,导致IPC死机,只有应用程序重启才有帮助
  • 只有DBU的使用为每个应用程序引入了3-5 MB的ram使用量(在一个具有512 MB ram的系统上,并乘以25个应用程序,这确实为改进提供了一些空间)
  • 数据流模型(信号/方法)对于我们需要的用例来说似乎有点太复杂了
  • 我们的下一个想法是切换到一些可用的。但我们也在寻找一些很好的功能:

  • 能够向多个应用程序广播或多播消息
  • 当应用程序与总线服务器连接/断开时,使其存在(当新应用程序连接和断开应用程序时,服务器可以广播)
  • 连接应用程序的看门狗。有时,应用程序在IPC上可能会出现错误(不响应IPC消息),而带有watchdog的服务器可能会检测到错误并断开该应用程序的连接,并通知其他人该应用程序已死亡

  • 在这种情况下,我们如何避免DBU?

    您对需求的描述不够详细。DBus的替代方案是什么?与其他传统的UNIX IPC相比,DBus提供的关键功能之一是服务发现。也就是说,一些由你从未见过的其他人开发的第三方应用程序可以访问你的API。如果你不需要,那么还有很多选择。如果你这么做了,那就是另一个问题了。我认为这个问题应该转移到超级用户身上。Linux上有很多IPC替代品。套接字、共享内存、消息队列。也许你可以试试看它是否适合你的需要。如果消息需要格式化,请查看类似或的内容。