ICE (Internet Communication Engine) 是zeroc公司实现的通信中间件
几大特性:
1. 多语言支持C++、Java、python, C#等,
2. 对分布式系统的支持,涵盖了负载均衡、位置服务、计算节点需要实时启动等特性。
3. 提供了基于发布-订阅机制的消息组建ICEStorm
一、书写slice文件,然要按照slice规定的语法来实现
Printer.ice
|
1
2
3
4
5
|
module
Demo { interface
Printer { void printString(string
s); };}; |
二、 编译slice代码,官方教程提供了命令行的编译方式:
?slice2py Printer.ice
这种方法还需要额外安装slice2py命令,为了省事没有采用这种方法,我们采用的是在程序中动态的加载slice文件并编译它。
?
三、实现服务端代码
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
|
import sys,
traceback, Ice #
动态加载slice文件并编译Ice.loadSlice("./Printer.ice") #
Demo即是从Printer.ice导出的模块名import Demo #
实现一个服务类class PrinterI(Demo.Printer): def printString(self,
s, current=None): print s status = 0ic = Nonetry: #
初始化ice运行环境(ice run time) Ice.Communicator ic = Ice.initialize(sys.argv) #
初始化一个适配器adapter 他的名字叫"SimplePrinterAdapter" #
采用默认协议tcp/ip 监听端口10000 adapter = ic.createObjectAdapterWithEndpoints("SimplePrinterAdapter", "default
-p 10000") #
为我们的Printer接口实例化一个工作的仆人 object = PrinterI() #
将上述实例化好的仆人添加到适配器中,他的识别码是"SimplePrinter" 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_exc() status = 1 |
四、实现客户端
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
|
import sys,
traceback, Iceimport Demostatus = 0ic = Nonetry: #
初始化运行环境 ic = Ice.initialize(sys.argv) #
获取远程printer服务的代理 base = ic.stringToProxy("SimplePrinter:default
-p 10000") #
请求服务端确认:”这是不是 Demo::Printer的代理接口?“ printer = Demo.PrinterPrx.checkedCast(base) if not printer: raise RuntimeError("Invalid
proxy") #
远程调用,看起来像本地的服务一样 printer.printString("Hello
World!")except: traceback.print_exc() status = 1if ic: #
Clean up try: ic.destroy() except: traceback.print_exc() status = 1sys.exit(status) |
在python中实现基于ICE框架的client、server模型
原文地址:http://blog.csdn.net/yuchen162009/article/details/45098405