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);#执行方法 |
结果展示: |
|