驗證兩種各自領域稱王的語言(JAVA /PHP),不同語言、不同機制的組合在一起,PHP負責WEB層,Java負責業務和數據邏輯層,真是一對黃金組合(Java+PHP整合=混血新寵兒),發揮各自優勢,適合開發B/S企業程序。
1技術問題
兩種不同環境,不同機制的語言結合,首先要解決的是如何通訊?其次是通訊內容如何處理?最后是兩者開發,部署環境整合?
1.1兩種語言對比
Php:直觀,快速,簡單,易學,開發動態網頁效率高,草根文化氣息濃重,是語言世界的平民英雄,注重于結果。
Java:強大而復雜,有眾多高端功能,又有IMB、Oracle等企業大顎的追捧,是語言世界的貴族王子。
1.2通訊問題
1.2.1消息隊列
從操作系統層面觀察: PHP和Java是系統中運行的不同進程,他們之間溝通屬于進程間通信技術(IPC):
在傳統的Unix環境中,IPC技術有:管道、消息隊列、共享內存、信號量等,但在同一個系統中,IPC通信比基于TCP的socket通信在性能、資源占用方面有相當大的優勢。
在Unix/Linux中,PHP基本提供了所有IPC的訪問接口,因為PHP可以看作是以C語言為核心的一個殼,而IPC是系統內核的組成部分,對外提供了一組C函數接口,因此PHP可以非常順暢的運用IPC技術。而Java為了追求夸平臺性(Windows的IPC技術和Unix的不同),沒有提供系統級的IPC訪問,這也體現了Java的文化特色:為追求統一可犧牲效能。
1.2.2 Socket
消息隊列技術只能適用于Unix/html' target='_blank'>Linux系統,而SOCKET基于TCP/IP的通訊機制,從而適應各種平臺。
從上圖中看出,PHP承擔HTTP層的職責,而Java承擔業務層的職責,他們通過System V Message Queue(消息隊列,進程間通訊IPC中的一種)相互溝通,Java需要JNI的支持。
使用消息隊列有以下好處:
1. 使php和java保持獨立性
2. 有極高的傳輸速度,大于socket
3. 相對于socket方式,Java服務端只向本機提供服務(沒有對外偵聽端口),相對安全,易于管理。
1.3 通訊內容問題
通信問題解決了,通信內容如何解決呢?
PHP和Java各自語言內部定義的數據類型,當兩種語言互相傳輸數據時,數據類型怎樣進行轉換呢?
(1)Xml: xml確是一種夸平臺、能夠很好描述對象模型的數據封裝技術,但xml體積大傳輸速率慢,通訊兩端解析也比較麻煩。
(2) 序列化: 在傳輸過程中使用序列化和反序列化對象來傳輸數據是一種公認且比較合理的方式,且兩種語言都支持。
2 Java與php 結合選型
目前已知的PHP與Java在Web間整合技術可分成SOAP(Simple Object Access Protocol)、Quercus、PHP/Java Bridge三種,這些技術可以讓PHP與Java在開發Web應用程序時互相使用彼此的程序庫。
SOAP
SOAP是IBM、Microsoft等公司開發、W3C推薦,用來實現分布式對象技術的協議。SOAP提供了一套以XML來包裝程序調用、參數傳遞與信息回傳的機制,借助XML純文字的特性,可通過HTTP、HTTPS、SMTP等通信管道穿越企業的防火墻。比起CORBA、Java RMI及DCOM這些以專屬binary格式傳送數據的分布式對象技術協議,SOAP具有與程序語言、平臺和硬件無關的特性。
Quercus
Quercus是一個開源 PHP 5 引擎,它已經擁有了純 Java 的完整實現。Quercus 在 Resin 應用服務器之上運行,利用了負載平衡、代理緩存等 Resin 特性。
PHP/Java Bridge
開源產品有:Php-java-bridge 與 LAJP
2.1 選擇條件
ü 免費、開源
ü 簡單易用
ü 高效穩定
2.2 LAJP
2.2.1 特點
? 優勢互補: PHP是非常流行的WEB編程腳本語言,有易學、易用、開發部署效率高的特點, 非常適合網頁編程;JAVA適合編寫具有復雜的業務功能和數據的程序,二者結合可發揮各自優勢。
? 高效穩定:Apache+PHP組合可帶來優異的WEB服務穩定性,而JAVA可補充如連接池、事物管理、分布式、對象模型等高端特性。
? 創新的通信機制: PHP和Java間的通訊方式采用系統消息隊列和Socket兩種機制,兼顧通訊效率和平臺兼容性。
? 數據類型自動轉換機制: PHP數據和Java數據可準確地自動匹配和轉換,無須程序員編寫解析代碼。
? 易用:LAJP安裝配置簡單,PHP端和JAVA端編程符合各自的編程習慣。
? 輕量級:LAJP架構非常輕量級,除了最基本的PHP和Java環境,不需要任何擴充的、第三方的組件、容器。
2.2.2 數據類型轉換
PHP和Java各有其語言內部定義的數據類型,當PHP數據傳送到Java,或Java數據傳送到PHP時,LAJP在內部自動地、準確地對他們進行轉換,程序員無需進行任何的解碼工作。
2.2.3 LALP 運行環境
消息隊列模式
環境需要滿足System V消息隊列的運行:
系統 目前常見的Unix/Linux系統都可滿足php(Apache)、java的運行,其中大部分默認支持System V消息隊列。
php php需要通過消息隊列和java進程通信,按php的說明,php在4.3.0版本以后支持System V消息隊列。
apache 無特殊要求,滿足php要求即可。
java java版本在1.5以后。
在Unix/Linux環境中,推薦使用消息隊列模式。
socket模式
系統 沒有限制,很難找到不支持TCP/IP的系統。
php 按php的說明,php版本 =4.1.0支持socket
apache 無特殊要求,滿足php要求即可。
java java版本在1.5以后。
Windows系統只能使用socket模式
在開發過程中可以同時使用這兩種模式,比如一般開發者使用Windows環境,而程序部署在Linux系統中,LAJP在模式的配置上和編碼無關。
2.2.4 部署
2.2.4.1 分布式架構
在重要的、關鍵性的業務場景中,用戶交互層和業務層是分開部署的,LAJP在此類架構中可以這樣使用:
WEB服務器中的Java是非常“薄”的一層,僅用來連接后面的EJB服務。
2.2.4.2 集群
隨著用戶訪問量的增加,WEB服務往往成為系統中的瓶頸,下面是LAJP在集群中的架構參考:
2.2.4.3 web集群
通過使用socket通訊模式的LAJP,可以搭建出簡單的分布式的WEB集群架構:
2.2.4.4 復雜架構應用
LAJP使用的靈活性,架構的設計和選擇更多在于我們自己的思想,下面的架構參考在WEB層、EJB層都使用了集群:
memcache是分布式的內存對象緩存技術,在PHP中可以非常方便的將Session數據存儲在其中,來同步WEB集群中各節點中的數據,從這里也可以體現到PHP在WEB領域相對于Java的“專業”。
本文介紹了Java與PHP之間的關聯,更多相關內容請關注php 。
相關推薦:
對于php實用經驗的總結
ThinkPHP的相關總結
關于??thinkphp基類的相關內容
鄭重聲明:本文版權歸原作者所有,轉載文章僅為傳播更多信息之目的,如作者信息標記有誤,請第一時間聯系我們修改或刪除,多謝。
新聞熱點
疑難解答