2009-09-15 23 views
0

我有一個Python程序,它使用subprocess.Popen()函數啓動PHP腳本。 PHP腳本需要與Python進行反覆通信,我試圖找到一種簡單但強大的方式來管理消息發送/接收。Python和PHP之間輕鬆,強大的IPC

我已經使用基本套接字編寫了一個工作協議,但它並不覺得很健壯 - 我沒有任何邏輯來處理丟棄的消息,而且我甚至不完全理解套接字是如何工作的,不確定還會發生什麼問題。

是否有任何通用庫或IPC框架比原始套接字更容易?

  • ATM我需要的東西,它支持Python PHP,但在未來我可能要能夠使用C,Perl和Ruby的也。
  • 我在找東西robust,即當服務器或客戶端崩潰時,另一方需要能夠正常恢復。

回答

0

你可以看看共享內存或命名管道,但我認爲有兩個可能的選項,假設這些語言中的至少一個被用於Web應用程序:

A.使用數據庫的原子性。在python中,開始一個事務,將一條消息放入一個表中,然後結束事務。從php開始一個交易,從表格中取出一條消息或將其標記爲「已讀」,並結束交易。讓你的PHP和/或Python自我感知足夠不要兩次發佈相同的消息。瞧;可靠(和可擴展)的IPC,使用現有的Web架構。使你的web服務器(假設爲webapp)能夠同時運行php和python,將任何內部進程鎖定到本地主機訪問,然後使用標準庫使用來自其他語言的xmlrpc或soap來調用它們。這也是可擴展的,因爲您可以稍後更改您的URL和安全鎖定。

+0

不,他們都不是Web應用程序,我不想將它們與數據庫引擎捆綁在一起。 – 2009-09-15 02:00:00

2

這聽起來像你想要一個通用的RPC框架。

你應該看看:

節儉可能更符合你的要求。它在Facebook內部使用。

+0

* ZeroC's Ice - http://www.zeroc.com是您可以使用的另一個客戶端/服務器'庫'。 * Google的ProtoBuf [http://code.google.com/p/protobuf/] – 2011-01-04 15:40:41