对于最近的项目,我有一个PHP脚本作为基于CLI的守护进程运行。该守护进程将负责监视/控制独立的工作进程。
用户将定期发出通过PHP Web前端管理工作人员的请求(CLI守护程序和前端代码位于同一物理服务器上)。 前端需要对守护进程进行方法调用。
我对如何处理这些“远程”方法调用感到困惑。我认为在标准的UNIX或TCP套接字上使用诸如JSON-RPC之类的RPC协议将是可行的方法,但是用于PHP的JSON-RPC,XML-RPC,SOAP等的每个实现似乎都紧密耦合到HTTP。由于我不通过网络进行通信,因此完全不需要HTTP。
所以,有两个问题:
答案 0 :(得分:1)
为什么大多数PHP RPC包都耦合到HTTP?
这很容易。 PHP是为网络量身定制的。用PHP编写CLI应用程序是很少见的。
为什么大多数PHP RPC包都耦合到HTTP?
让PHP在使用其他语言(例如Java)运行的程序上执行RPC更为常见,并且有很好的选择。
对于CLI PHP程序,我不知道任何开箱即用的解决方案。但应该可以使用UNIX套接字实现自定义解决方案。请参阅sockets extension。请注意,PHP中不存在多线程支持可能会使这更加困难(要处理多个连接,您必须分叉或实现自己的单线程调度程序......)
答案 1 :(得分:0)
您仍然可以使用HTTP并连接到localhost,这不会产生任何网络流量。我不认为通过直接使用套接字可以获得任何真正的优势,但是如果你真的想要一个不同的传输层,你可以使用Ripcord(http://ripcord.googlecode.com/),它允许你指定你的自己的传输层类。为了完整披露,我是Ripcord的作者,所以我可能有偏见。