3

我目前处于计划阶段,可以提供帮助。我将使用插入各种模块(i2C、USB 等)的 rasberry pi,这些可以是任何东西,例如测量温度、风速、方向等的模块。

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

所有这些都将在树莓派上发生,而不是通过任何类型的网络。

我的问题是使用什么来在主程序和守护进程之间进行通信。我一直在阅读有关使用 dbus 的信息,但是有很多人说将其用作最后的手段。

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

附带说明一下,将它们分开的想法是因为如果任何模块有问题,我可以轻松地重新启动它而不会影响主程序。

4

3 回答 3

2

查看 ZeroMQ。这是类固醇上的插座。

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

只需socket.bind在您的“主程序”和socket.connect您的客户中使用。

在您的情况下,听起来您可能对 Pub-Sub 模式感兴趣,其中服务器订阅,客户端发布,这意味着它是一种单向通信。

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

http://www.zeromq.org/

于 2013-04-10T17:24:27.893 回答
1

我只会使用unix 套接字

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

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

于 2013-04-10T15:02:54.190 回答
-3

好吧,有一种观点认为,您应该将应用程序执行的每项工作编程为一个单独的、离散的程序,该程序只执行一项工作,然后通过 shell 将它们相互传递,或者在您的主​​程序需要时调用它们中的每一个程序。

如果需要和易于轮询,只需在后台运行的几个程序(必须爱&)被杀死。

不需要重新发明轮子,你知道的。

于 2013-04-10T15:07:35.787 回答