PHP中介軟體--ICE

來源:互聯網
上載者:User

標籤:wait   組件   hive   配置   images   mkdir   管理   就是   3.4   

ICE(Internet Communications Engine)是Zeroc提供的一款高效能的中介軟體。使用ICE能使得php(或c++,java,python)與java,c++,.net,python等進行互動。基於ICE可以實現電信級的解決方案。

 

1第一個問題:為什麼要使用中介軟體?

設想一個這樣的情境:對於一個大型網站來說,往往有很多個web伺服器,每個web伺服器都存在很多對於資料庫的操作。如果直接在php程式上直接操作資料庫,那麼勢必要在每台web伺服器都設定資料庫的使用者名稱,密碼等資訊,這是極度不安全的。並且如果我們要統一對資料庫的操作進行管理和修改等,那麼久要去每個web伺服器上修改。因此,這時候中介軟體就產生了。它是基於SOA(面向服務架構)的思想,將對資料庫的操作統一成一個服務,放置於一台服務機上,每個web伺服器要對資料庫進行操作,就可以直接存取這個提供中介軟體服務的伺服器。

還有一點,考慮到效能問題,這裡的提供服務的機子我們不使用html和xml傳輸資料,一般使用TCP,UDP這層的通訊。

因此ICE就是現在非常流行的網站開發中介軟體之一。

 

關於更多理解為何使用中介軟體的原因這裡有兩個連結:

http://blog.csdn.net/phphot/archive/2009/04/18/4089806.aspx

http://hi.baidu.com/xdh2571/blog/item/8f01fafc4debfc89b801a04b.html

 

2 對於ICE,它是怎麼樣通訊結構?

ICE有分為提供服務的一方Server和尋求服務的一方Client,兩台機子上都需要安裝ICE組件,他們的通訊結構如下:

 

Client端應該事Crowdsourced Security Testing道Server端能提供的服務是什麼,有什麼格式?這就是圖中的Proxy Code,在Proxy Code中定義好了類和介面。Server端中介面定義的就是Skeleton,具體實現介面的是Server Application,Server Application可以是C++,java,C#等寫的,但是ICE不提供PHP寫Server端。

 

3 安裝ICE

安裝環境: CentOS

1)
cd /etc/yum.repos.d/
wget http://www.zeroc.com/download/Ice/3.4/rhel5/zeroc-ice.repo

2)

編輯zeroc-ice.repo:

[zeroc-ice]

name=Ice 3.4 for Red Hat Enterprise Linux releasever?releasever?basearch

baseurl=http://www.zeroc.com/download/Ice/3.4/rhel5/$basearch

enabled=1

gpgcheck=1

gpgkey=http://www.zeroc.com/download/RPM-GPG-KEY-zeroc-release

3)

使用yum安裝

yum install ice* db46* mcpp-devel

4)

確認機子是否安裝g++,如果沒有,則安裝:

yum install gcc-c++ libstdc++-devel

 

4 寫一個ICE例子,目的:Client端每調用一次服務,Server端就打出一個"hello world”;

 

基本環境:由於是實驗目的,我僅僅將Client和Server同當做一台CentOS機子

 

A 建檔案夾: mkdir ice_demo

 

B 建立檔案Printer.ice,這個.ice檔案是ICE的slice檔案,在其中定義了服務的對象和介面

module Demo { 
interface Printer { 
void printString(string s); 
}; 
};

 

C #slice2cpp Printer.ice //產生出了Printer.h和Printer.cpp兩個檔案

D 建立Server.cpp

#include <Ice/Ice.h> 
#include <Printer.h> 
  
using namespace std; 
using namespace Demo; 
  
class PrinterI : public Printer { 
public: 
virtual void printString(const string& s, 
const Ice::Current&); 
}; 
  
void  
PrinterI:: 
printString(const string& s, const Ice::Current&) 

cout << s << endl; 

  
int 
main(int argc, char* argv[]) 

int status = 0; 
Ice::CommunicatorPtr ic; 
try { 
ic = Ice::initialize(argc, argv); 
Ice::ObjectAdapterPtr adapter 
= ic->createObjectAdapterWithEndpoints( 
"SimplePrinterAdapter", "default -p 10000"); 
Ice::ObjectPtr object = new PrinterI; 
adapter->add(object, 
ic->stringToIdentity("SimplePrinter")); 
adapter->activate(); 
ic->waitForShutdown(); 
} catch (const Ice::Exception& e) { 
cerr << e << endl; 
status = 1; 
} catch (const char* msg) { 
cerr << msg << endl; 
status = 1; 

if (ic) { 
try { 
ic->destroy(); 
} catch (const Ice::Exception& e) { 
cerr << e << endl; 
status = 1; 


return status; 
}

E

#c++ -I. -I$ICE_HOME/include -c Printer.cpp Server.cpp

# c++ -o server Printer.o Server.o \ -L$ICE_HOME/lib -lIce –lIceUtil   //在同檔案夾下會出現:server執行檔案

 

F #slice2php Printer.ice

G 建立Client.php

<?php 
require ‘Ice.php‘; 
require ‘Printer.php‘;

ic = null;
     try

     {ic = null;     try     {ic = Ice_initialize(); 
base=base=ic->stringToProxy("SimplePrinter:default -p 10000"); 
printer=DemoPrinterPrxHelper::checkedCast(printer=DemoPrinterPrxHelper::checkedCast(base); 
if(!$printer) 
throw new RuntimeException("Invalid proxy");

printer->printString("Hello World!");
     }

     catch(Exceptionprinter->printString("Hello World!");     }     catch(Exceptionex) 

echo $ex; 
}

if(ic)
     {

     // Clean up

     try

     {ic)     {     // Clean up     try     {ic->destroy(); 

catch(Exception ex)

     {

     echoex)     {     echoex; 


?>

H

開啟一個終端運行 #./server

開啟另一個終端運行 php Client.php

 

發現每運行一次Client.php,第一個終端就打出一個Hello World. ICE 運行成功.

 

 

附註:大型的網站對於ICE的使用是很多的。比如需要實現一個分詞搜尋的功能使用lucence,對資料庫的訪問,對memcached的訪問都可以直接在ICE中寫一個服務來提供統一管理和使用

PHP中介軟體--ICE

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.