我做了一些PHP守护进程,现在我希望我的PHP webapp与它通信,例如发送XML文档并在一段时间后收到响应。由于我想避免通过网络进行文件操作(因为它涉及FTP),发送此文档的理想方式是什么? PHP守护程序和PHP Web应用程序位于不同的服务器上。 到目前为止,我已经调查了各种选项:
如果消息服务器看起来是最好的选择,最适合PHP的是什么?我想避免使用集中式单一消息服务器,因为它很难批准防火墙规则,并且网络非常庞大,复杂并且非常容易出错。 因此,需要星形网络的消息服务器,因此需要非常轻量级,易于部署且没有困难的依赖。
答案 0 :(得分:2)
与您的守护进程通信包含两个完全不同的方面:
当我不得不解决一个非常类似的问题时,我很难学到这一点。
将数据发送到守护程序受限于单线程守护程序无法轻松侦听的事实。我这样解决了:
这对于作为消费者的webapp来说非常自然 - 繁重的工作完全按照Web请求完成:守护程序在空闲时都会启动这两个方向。
现在有关如何将消息发送到守护程序:最简单的方法是让某种服务器在那里运行
我们使用生产中的所有三种变体并获得优异的结果:如果消费者跟踪已经处理过的命令文件,可以很容易地排除由于网络不稳定而导致的双重执行。
答案 1 :(得分:1)
答案显而易见:使用TCP但不要使用单线程编程语言作为TCP守护程序。
如果你想为 workers 使用PHP,也许是因为你希望他们使用共享的PHP库,你可以用支持线程的编程语言编写最小的守护进程,并转发请求PHP帮助程序脚本(或者如果要在不同主机上部署工作程序,则为池化,单线程TCP守护程序,这有利于可伸缩性)
但是,已经存在满足要求的软件:Gearman