linux中应用程序之间通信的一种方式

linux中应用程序之间通信的一种方式,linux,daemon,raspberry-pi,Linux,Daemon,Raspberry Pi,我目前正处于计划阶段,需要帮助。我将使用rasberry pi,并将各种模块插入其中(i2C、USB等),这些模块可以是测量温度、风速、方向等的任何模块 其思想是让每个模块运行自己的守护进程,该守护进程将根据请求向主程序提供数据,或者主程序可以请求守护进程重新启动 所有这些都将发生在raspberry pi上,而不是通过任何网络 我的问题是如何在主程序和守护进程之间进行通信。我一直在读关于使用dbus的书,但是有很多人说使用dbus是最后的选择 我已经研究了一段时间,想不出其他(也许更简单)的方

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

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

所有这些都将发生在raspberry pi上,而不是通过任何网络

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

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

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

我会用它

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


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

有一个学派认为,您应该将应用程序所做的每一项工作作为单独的任务进行编程,一种离散程序,它只执行一个任务,然后通过shell将它们相互传递,或者在主程序需要时调用它们中的每一个

只要在后台运行一些程序(gottalove&),如果需要的话,就可以删除它们,并简化轮询


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

看看ZeroMQ。这是类固醇

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

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

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

否则,您可能会对Req路由器经销商代表模式感兴趣


我想这个问题并不局限于树莓皮。“标准”方法包括UNIX套接字(见Brendan的答案)或共享内存(请看Pi站点上的这一页:)。是的,我同意,它实际上并不限于RPi。另一种方法是较慢的同步(每x分钟一次)可能是一个文件,类似于共享数据库,或者只是主程序解析的每个守护进程的日志文件。他不是问为什么/如果他应该这样做,而是问怎么做。