最近一直在關注ICE(http://www.zeroc.com/),不得不說其功能的強大,我主要看重幾個點:
1.多語言支持,C++,Java,C#,Objective-C,Python,Ruby,PHP。
2.高級RPC,同時支持同步調用和異步調用,由于RPC是在ICE框架環境下運行的,所以穩定性和可靠性可以保證。在服務端內部使用會非常方便,比如將ICE前置在數據庫之上,所有對數據庫的訪問方式就成了RPC
3.對分布式系統的支持-ICEGrid,涵蓋了負載均衡,位置服務,計算節點“需要時啟動”等眾多特性,更多內容可以參考幫助文檔(http://www.zeroc.com/doc/index.html)。簡單提一下“需要時啟動”,就是說某個client調用了節點Node1,如果Node1此時沒有啟動,則ICE負責將他啟動,這個過程對client來說是透明的。 假如計算節點的邏輯上存在bug,觸發bug會引起節點退出。通常的做法是自己寫一些監控程序,如果發現節點不在了重啟動,利用ICEGrid后,就避免了這個問題
4.提供了基于發布-訂閱機制的消息組建ICEStorm
上面只是我關注的幾點,更多的功能特性,請參考幫助文檔! 下面以python作為web的開發后端,來調用python寫的ICE服務,注意ICE服務可以是其他語言編寫的,這個例子是修改的ICE提供的demo(D:\libs\Ice-3.3.1\demopy\book\printer),主要的功能是
(1)client通過瀏覽器打開某個python頁面
(2) python頁面調用ICE基礎服務
(3)python頁面將結果通過瀏覽器返回給client
一。接口文件Printer.ice內容如下:
#ifndef SIMPLE_ICE
#define SIMPLE_ICE
module Demo
{
interface Printer
{
string echo(string s);
};
};
#endif
二。Server.py內容如下:
import sys,traceback,Ice
Ice.loadSlice(’Printer.ice’)
import Demo
class PrinterI(Demo.Printer):
def echo(self, s, current=None):
print s
return s
status = 0
ice = None
try:
ic = Ice.initialize(sys.argv)
adapter = ic.createObjectAdapterWithEndpoints(”SimplePrinterAdapter”, “default -p 10000″)
object = PrinterI()
adapter.add(object, ic.stringToIdentity(”SimplePrinter”))
adapter.activate()
ic.waitForShutdown()
except:
traceback.print_exc()
status = 1
if ic:
# Clean up
try:
ic.destroy()
except:
traceback.print_exec()
status = 1
sys.exit(status)
三。echo.psp內容如下:
<%
import sys, traceback, Ice
import Demo
status = 0
ice = None
try:
ic = Ice.initialize(sys.argv)
base = ic.stringToProxy(”SimplePrinter:default -p 10000″)
printer = Demo.PrinterPrx.checkedCast(base)
if not printer:
raise RuntimeError(”Invalid proxy”)
sEcho = printer.echo(”Hello ICE!”)
print sEcho
except:
traceback.print_exc()
status = 1
if ic:
# Clean up
try:
ic.destroy()
except:
traceback.print_exc()
status = 1
%>
<%=sEcho%>
四。運行過程:
1.啟動ICE服務:python Server.py
2.啟動Apache
3.瀏覽器中輸入http://localhost:8080/echo.psp
4.此時瀏覽器中顯示:Hello ICE!