工作快一年了,打算把前半年的東西複習下,並且生成blog保存。
轉載請註明:http://blog.csdn.net/lengzijian/article/details/7688903
2.1ice簡介
Ice是一種面向對象的中間件平臺。從根本上說,這意味着ice爲構建面向對象的客戶-服務器應用提供了工具、API和庫的支持。Ice應用是和在異種環境紅使用:客戶和服務器可以用不同的編程語言編寫,可以運行在不同的操作系統而後及其架構上,並且可以使用多種網絡技術進行通信。無論部署環境如何,這些應用的編碼都是可移植的。
2.2爲什麼學習ice
在下週的任務中,主要完成個人中心的優化,而個人中心是基於ice架構的,爲了能夠弄清接口的調用機制和原理,打算深入瞭解下ice架構,但是發現學習能力有限,只能淺顯的談談個人學習感受,希望在今後的日子裏能夠學習到更多關於ice的知識。
2.3ice的服務
服務名 |
功能 |
IcePack |
① 把配置器名解析爲協議和地質隊 ② 註冊服務器 ③ 簡單的對象查找 |
IceBox |
協調許多應用組件的啓動和停止 |
IceStrom |
一種發佈-訂閱系統 |
IcePatch |
軟件修補服務 |
Glacier |
Ice防火牆,保障客-服之前安全通信 |
2.3python創建客戶-服務器應用
代碼實現:
Hello.ice |
#ifndef HELLO_ICE #define HELLO_ICE module Demo { interface Hello { idempotent void sayHello(int delay); void shutdown(); }; }; #endif |
服務端主要代碼: |
class HelloI(Demo.Hello): #定義接口方法的實現 def sayHello(self, delay, current=None): if delay != 0: time.sleep(delay / 1000.0) print "Hello World!!!!" def shutdown(self, current=None): current.adapter.getCommunicator().shutdown() class Server(Ice.Application): def run(self, args): if len(args) > 1: print self.appName() + ": too many arguments" return 1 adapter = self.communicator().createObjectAdapter("Hello")#創建對象適配器 adapter.add(HelloI(), self.communicator().stringToIdentity("hello"))#配置器的add方法加入一個新的servant adapter.activate() #激活適配器 self.communicator().waitForShutdown()#掛起發出調用的線程,知道服務器實現終止爲止 return 0 |
客戶端主要代碼 |
twoway=Demo.HelloPrx.checkedCast( self.communicator().propertyToProxy('Hello.Proxy').ice_twoway().ice_timeout(-1).ice_secure(False))#實現向下轉換,詢問服務器這是Hello接口代理嗎?如果是返回hello代理,如果不是返回一個空代理 twoway.sayHello(delay)#調用sayHello方法 |
實現結果: |
|
2.4php創建客戶,python創建服務器應用
主要代碼:
Php客戶端主要代碼: |
$p = $ICE->stringToProxy("hello:tcp -p 10018:udp -p 10010");#創建一個代理 $hello = $p->ice_checkedCast('::Demo::Hello'); #實現向下轉換,詢問服務器這是Hello接口代理嗎?如果是返回hello代理,如果不是返回一個空代理 $hello->sayHello($delay);#執行方法 |
結果展示: |
|