在linux中的应用程序之间进行通信的方法

时间:2013-04-10 14:56:53

标签: linux daemon raspberry-pi

我目前正处于计划阶段,可以提供帮助。我将使用rasberry pi,其中插入了各种模块(i2C,USB等),这些可能是用于测量温度,风速,方向等的模块。

这个想法是让每个模块都运行自己的守护进程,这个守护进程会根据请求将数据提供给主程序,或者主程序可以请求守护进程重新启动。

所有这一切都将发生在树莓派上,而不是任何形式的网络。

我的问题是在主程序和守护进程之间进行通信的用途。我一直在阅读有关使用dbus的内容,但有很多人说它是最后的选择。

我已经研究了一段时间,无法想出任何其他(也许更容易)的方法。

在旁注中,将它们分开的想法是因为如果任何模块有问题,我可以轻松地重新启动它而不影响主程序。

3 个答案:

答案 0 :(得分:2)

了解ZeroMQ。这是类固醇的插座。

它很容易上手,它非常适合同一进程中的线程之间或不同进程之间的通信。 ZMQ消除了多线程和进程通信通常意味着的许多麻烦。

只需在“主程序”中使用socket.bind,在客户中使用socket.connect

在你的情况下,听起来你可能会参与Pub-Sub模式,服务器订阅,客户端发布,这意味着它是单向通信。

否则,您可能对Req-Router-Dealer-Rep模式感兴趣。

http://www.zeromq.org/

答案 1 :(得分:1)

我只会使用unix sockets

  

Unix域套接字的API类似于Internet套接字的API,但它不使用底层网络协议进行通信。

我无法链接到示例,因为您没有提供语言,但基本上服务器将在文件系统的某个地方打开一个套接字(最好是它具有读/写访问权限,但所有其他程序只有读取权限) )。然后,客户端程序可以连接到该套接字并发送请求,就像它们通过互联网一样。

答案 2 :(得分:-3)

有一种思想流派认为你应该将你的应用程序所做的每项工作编程为一个单独的,独立的程序,只执行一个作业,然后通过shell将它们相互管道化或在需要时调用它们中的每一个由您的主程序。

只需要在背景中运行的一些程序(必须爱和他们),如果需要,可以轻松查看。

你知道,

无需重新发明轮子。