Python 和 PHP 之间的简单、强大的 IPC
Posted
技术标签:
【中文标题】Python 和 PHP 之间的简单、强大的 IPC【英文标题】:Easy, Robust IPC between Python and PHP 【发布时间】:2009-09-15 00:47:39 【问题描述】:我有一个使用subprocess.Popen()
函数启动php 脚本的python 程序。 PHP 脚本需要与 Python 来回通信,我正在努力寻找一种简单而可靠的方式来管理消息发送/接收。
我已经使用基本套接字编写了一个工作协议,但感觉不是很健壮 - 我没有任何逻辑来处理丢弃的消息,我什至不完全理解套接字是如何工作的,这让我不确定关于还有什么可能出错的地方。
有没有比原始套接字更简单的通用库或 IPC 框架?
ATM 我需要支持 Python 和 PHP 的东西,但将来我可能还希望能够使用 C、Perl 和 Ruby。 我正在寻找稳健的东西,即当服务器或客户端崩溃时,对方需要能够优雅地恢复。【问题讨论】:
【参考方案1】:听起来你想要一个通用的 RPC 框架。
你应该看看:
节俭http://incubator.apache.org/thrift/ XML RPC http://docs.python.org/library/xmlrpclib.html 和 http://phpxmlrpc.sourceforge.net/ AMQP 例如http://en.wikipedia.org/wiki/Advanced_Message_Queuing_ProtocolThrift 可能更符合您的需求。它被 Facebook 内部使用。
【讨论】:
* ZeroC 的 Ice - zeroc.com 是您可以使用的另一个客户端/服务器“库”。 * 来自 Google 的 ProtoBuf [code.google.com/p/protobuf/]【参考方案2】:您可以查看共享内存或命名管道,但我认为还有两个更可能的选择,假设至少其中一种语言用于 web 应用程序:
A.使用数据库的原子性。在 python 中,开始一个事务,将消息放入表中,然后结束事务。从 php 开始一个事务,从表中取出一条消息或将其标记为“已读”,然后结束事务。让你的 PHP 和/或 python 有足够的自我意识,不要两次发布相同的消息。瞧;可靠(且可扩展)的 IPC,使用现有的 Web 架构。
B.使您的网络服务器(假设为 webapp)能够同时运行 php 和 python,将任何内部进程锁定为仅 localhost 访问,然后使用标准库从您的其他语言使用 xmlrpc 或 soap 调用它们。这也是可扩展的,因为您可以稍后更改 URL 和安全锁定。
【讨论】:
不,它们都不是网络应用程序,我不想将它们与数据库引擎捆绑在一起。以上是关于Python 和 PHP 之间的简单、强大的 IPC的主要内容,如果未能解决你的问题,请参考以下文章