(以前写的一篇文章)
最近一直在关注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!