2009-12-04 167 views
0

我正在研究涉及數據庫(My SQL),網站(PHP)和自定義高性能服務器應用程序(C++)的項目。 C++應用程序(及其隨附的客戶端應用程序)構成項目的主要部分,數據庫爲其存儲長期數據。該網站主要用於顯示各種統計和管理。跨語言開發問題

1)我希望PHP腳本和C++應用程序能夠以某種方式進行通信,因爲數據庫僅用於持久數據,另外C++應用程序可能會緩存一些事情,因此需要重新加載數據在某些情況下。他們很可能會在不同的機器上,甚至可能是不同的操作系統。我一直在考慮使用一些簡單的命令響應協議,TCP可能是最好的選擇?

2)一次編寫通用數據庫接口代碼的最佳方式是什麼,並且能夠在PHP網站和C++應用程序中使用它?

回答

1

您可能會嘗試不允許PHP訪問數據庫。讓C++應用程序完成所有的數據庫工作,並將數據提供給PHP站點。您可以運行C++應用程序的一部分作爲PHP的服務器,以從中獲取報告等。

+0

是否有一種將C++接口公開給PHP的理智方法?或者我需要爲此構建一個全功能的TCP協議? – 2009-12-04 23:15:43

+1

你可以使用更簡單的東西,如JSON,在現有協議(本例中爲HTTP)的基礎上構建它。 – danielkza 2009-12-05 04:02:17

3

1)使用數據庫進行通信。 C++應用程序可以使用

select * from table where some_last_modified_timestamp > '<last time checked>'; 

2)使用存儲過程優先於PHP和C++中的硬編碼查詢。

+2

是的,不要過時這一點,使用數據庫作爲IPC。 – Xailor 2009-12-05 00:30:18

0

我的方法是使用痛飲。我使用python,但它也支持PHP。

然後,從腳本中使用它非常容易。

其他解決方案可能是一些RPC(這將允許服務器和PHP應用程序在不同的地方)。

+0

我使用swig編寫Python擴展,但是swig要解決C++服務器位於不同服務器上的問題,在不同的操作系統上可能使用PHP? – 2009-12-04 23:17:53

+0

直接沒有。但是,大多數語言通過網絡提供簡單的數據交換,而不必經歷如何序列化數據的痛苦。因此,整個過程變得更容易。然而,在兩臺機器上使用php並不是一個非常優雅的解決方案;) – 2009-12-04 23:50:09

1

1)我也建議TCP。根據請求 - 響應的複雜性,我可能會選擇一些特別的文本協議或使用XML(尤其適用於響應或請求結構更復雜的情況)。如果你使用XML,你不需要編寫你自己的解析器/生成器。你甚至可以嘗試使用XML-RPC,但我還沒有實際的經驗。

1

在PHP和C++中使用相同的SQL的最佳方式是準備語句。

溝通的一個好方法就是託管一個服務器(自定義/肥皂/休息),另一個連接到。 PHP可以輕鬆地主機和連接,並且由於該代碼是用C語言編寫的,所以在C++中也應該很容易。

寫一個像Eric Seppanen這樣的PHP擴展可能超出了你的項目ID的範圍和需求。

1

使用ThriftProtobufs(可能是Avro)來聲明通信協議並通過tcp套接字使用它。它將解決您的跨語言問題,而無需推出自定義協議,並最終以雙方實際對象(靜態類型爲C++!)。我已經看過Thrift這樣非常成功地使用了。

0

我是初學者,所以請原諒我的想法是非常糟糕的。

但是爲什麼我們不能通過TCP傳輸XML。有一個C++ TCP服務器和PHP TCP客戶端。我認爲PHP有​​一個非常強大的套接字API

+0

原始海報沒有給出任何關於通信的細節,例如哪個啓動通信,通信有多複雜,或者PHP是否能夠連接到C++服務器,反之亦然。 – wallyk 2009-12-05 06:20:54

+0

我想我被誤解了,但原來的海報正在考慮使用TCP。 – anijhaw 2009-12-14 07:37:08