ice学习和编码
工作快一年了,打算把前半年的东西复习下,并且生成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);#执行方法
结果展示: