首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在Linux中,C与PHP之间的一种良好的进程间通信方法是什么?

在Linux中,C与PHP之间的一种良好的进程间通信方法是什么?
EN

Stack Overflow用户
提问于 2015-02-01 09:36:16
回答 3查看 2.3K关注 0票数 0

实际上,我不知道我是否在问一个恰当的问题。让我先描述一下我的问题。

终端用户<-1-> web服务器(通过PHP) <-2->内部进程(通过C或C++) <-3->外部硬件

1应该类似于ajax请求。2应该类似于进程间的交流。3应该是uart RS232通信。

最终用户将请求更改硬件上的某些设置,然后请求将传播到硬件。硬件应答成功或失败,结果将传回给用户。硬件应答延迟可在1秒内完成。

因此,当when服务器接收到来自最终用户的ajax请求时,它将保存并向c/c++程序发送IPC请求。c/c++程序通过UART发送,等待硬件回复。对于UART部分,有异步UART模型,因此c/c++程序不需要继续等待uart。

end服务器将等待c/c++程序返回(再次通过IPC ),然后将结果转发给最终用户。

因为has服务器没有内存,所以不可能有任何异步的东西(据我理解)。

我可以想到一个简单的方法,就是通过文件或数据库。The服务器持续读取文件或数据库以进行回复。

但我并不认为这是一个好方法,因为它会导致服务器CPU周期的浪费。

如果我能容忍一些延迟,嗯,这取决于,但我认为在用户端几秒钟的延迟对他们来说是可以的。

你能建议我一些很好的IPC方法来达到我的目的吗?

如果你认为有一个更好的解决方案(比我上面的描述)对整个过程或任何具体的链接(包括链接1,2和3),请也分享你的2分钱。

希望我能清楚地提出问题。

谢谢。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2015-02-01 18:09:45

您可以找到的最简单的解决方案可能是使用管道。这些过程将有一个打开的管道来读取“呼叫”,并以同样的方式回答它们。

一种可能的设置方法是在一个特定的或可变的位置拥有一对命名管道(mkfifo)。这个过程和PHP都知道这样的管道。该过程将阻止读取某个文本“协议”中的请求/命令的循环,并通过另一个管道将其写回PHP。这样,PHP和外部进程都可以停止/终止和重新启动,通信路径仍然是稳定的。

如果需要的话,您可能需要做一些其他的事情来验证进程是否真的在运行,但是在这个“协议”上使用一个简单的"ping“命令就足够了。

这假定:

  • 您有可能对与硬件通信的进程进行改进(否则,您将绑定到它已经提供的任何内容)。
  • 您没有高性能要求(管道相对比较慢)
  • 在PHP脚本并发访问要处理的情况下,不存在并行性问题(除非进行一些锁定,否则将在管道中混合编写2个并发请求)

当然还有其他的方法来实现这一点,但我发现很难考虑其他的方法,就像这样简单。排队(d-bus,其他),如一些评论中所建议的,只是建立在这个想法之上,但增加了更多的复杂性IMHO,因此,如果不需要这些其他服务提供的功能,管道就足够了。

票数 1
EN

Stack Overflow用户

发布于 2015-02-05 02:38:40

只要我的2分钱(应该是一个评论,但我没有声誉)使用零或其他一些著名的队列库为您的ipc。

从理论上讲,使用fifos和域套接字非常简单,然而,在实践中,您需要对很多边缘情况进行编码。例如,高水位标志,重新连接等。

票数 1
EN

Stack Overflow用户

发布于 2017-04-14 20:59:15

您也可以有一个纯C的You服务器!

检查猫鼬公民网

第一种方法适用于像ESP8266和ESP32这样的设备。

猫鼬是在商业和GNU GPL v.2开源许可证下发布的。

民间网站使用麻省理工学院的许可证。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/28261364

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档