2009-08-20 55 views
4

我們在公司遇到問題,我試圖找到最佳解決方案。PHP與Java程序通信

最近購買了軟件,該軟件是利用Java程序爲特定貨件獲得稅款。需要這個網站是用PHP4編寫的。我如何在兩者之間進行溝通?

有人建議使用文件來溝通,但,這是可怕的慢,因爲需要的Java程序重新編譯每次。那麼,最佳解決方案是什麼:

  1. 創建一個多線程Java服務器並使用PHP發送/接收信息。
  2. 一些其他類型的文件寫入方法的
  3. 一些很酷的東西,我不知道的。

在此先感謝!

編輯: 我明白了Web服務的重要性,但爲什麼會變成這樣更高效,使用一座耗資線程基於socket的Java服務器?連接到這個Web服務的唯一的東西就是我的PHP程序,沒有其他人。看起來這對我的簡單任務來說可能是過度的。我錯了嗎?如果是這樣,爲什麼?謝謝。

+0

我把它不重新編譯的PHP服務器是可能的,也沒有升級? – 2009-08-20 17:02:44

+0

不幸的不是。 :( – frio80 2009-08-20 17:52:36

+2

關於你的編輯 - 如果你使用基於多線程的基於套接字的java服務器的開銷是你將實現你自己的RPC,而HTTP是一個建立的協議,你可以在HTTP之上使用XML,XML可以很容易生成並在兩者之間進行解析;或者,您可以使用基於HTTP的XML上的SOAP,這種類型可以保證您將要使用的API;使用更高級別的API可以使您避免重新創建某個輪子 – 2009-08-20 20:58:29

回答

7

將Java程序包裝到Web服務中,並從PHP中調用它。您甚至可以在Web服務中使用緩存來優化性能。

+0

I我們會盡力爲您解決這個問題 – 2009-08-20 17:14:28

+0

這真的是最可行的解決方案 – MunkiPhD 2009-08-20 17:17:09

+1

這也會在您的組件之間產生鬆散的耦合,允許您升級或更改任何一方而不會影響其他方面+1 – 2009-08-20 17:23:20

0

由於您使用PHP4,你可能只想建立一個Tomcat服務器是一個封閉的網絡上,或者只是感興趣的機器上的地方,並將它與一個servlet溝通,這樣,你不必須編寫一個多線程服務器並處理創建通信接口。

如果你可以升級,該頁面還有其他兩個選項的利益可能: http://us3.php.net/manual/en/intro.java.php

+0

我強烈建議不要使用PHP/Java橋接器,因爲它會導致很多配置和正常工作的痛苦,而且它非常慢。 – 2009-08-20 17:08:36

+0

它是實驗性的,所以涉及風險,但這是另一種選擇。我認爲servlet的想法是最簡單的,因爲它聽起來像是一點點來回的數據。 – 2009-08-20 17:18:51

1

爲什麼不轉儲信息到數據庫中,並有某種schedualed工作從中讀取一次,一段時間?

您可以隨時使用允許您在Tomcat Servlet容器中運行PHP的Quercus。

+0

儘管您可以這樣做 - 如果他們需要接近實時的信息,它會以一定的時間間隔運行計劃作業,從而引入各種令人頭痛的問題。 – MunkiPhD 2009-08-20 17:18:25

0

給看看Quercus

櫟是的Caucho技術的快速,開源,PHP語言

我從來沒有使用過,雖然100%的Java實現,

0

網站服務就是答案。這是一個不錯的intro link。你的問題是Web服務走到最前面的原因 - 通常不能通信的系統之間的通信。

Web服務基本上要做的是在PHP和Java系統之間發送XML。你將不得不爲這兩個人建立一個界面,這在暴發戶中可能會更困難,但你以後會從中獲益。無論哪種情況,它都比在服務器上讀寫文件要快得多。磁盤I/O是任何服務器上的主要瓶頸。

1

Web Services是優雅的解決方案。但是在很多情況下,我發現要實現一個快速而又髒的解決方案非常實用:啓動一個使用輕量級通信協議進行通信的Java服務器(沒有像Web服務的XML這樣的重量級的東西) - 例如:Apache Thrift。寫一個非常輕的客戶端,從命令行獲取參數並將輸出寫入控制檯。客戶端可以使用Java甚至其他語言,如C++(Apache Thrift支持)。然後,您可以撥打system()或使用exec()致電客戶。

這不是我會推薦用於生產的解決方案,但它對原型設計非常有用。快速且骯髒,靈活且學習曲線非常適中(如果您已經在Java過程之間使用輕量級通信)。

0

我可能會錯過一些東西,但如果你的java程序的輸出所需要的值,你就不能從PHP執行exec(http://dk.php.net/manual/en/function.exec.php

+1

當然,問題是需要5秒鐘才能執行bc,因此需要包含很多類文件。 – frio80 2009-08-20 19:43:43

0

使用PHP/Java Bridge從sourceforge.net啓動java程序。它成熟,快速和易於安裝。

+1

花了一段時間與PHP/Java Bridge,我真的不得不不同意這一點。 – 2009-08-22 15:27:39

+0

請注意,PHP/Java Bridge位於http://php-java-bridge.sourceforge.net。 您測試過的舊Java擴展(http://us3.php.net/manual/en/intro.java.php)不再可用。該頁面留作參考。 – 2009-08-22 16:23:30