码迷,mamicode.com
首页 > 编程语言 > 详细

在python中实现基于ICE框架的client、server模型

时间:2015-04-17 18:21:12      阅读:318      评论:0      收藏:0      [点我收藏+]

标签:python   ice   

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 = 0
ic = None
try:
    # 初始化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, Ice
import Demo
 
status = 0
ic = None
try:
 
    # 初始化运行环境
    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 = 1
 
if ic:
    # Clean up
    try:
        ic.destroy()
    except:
        traceback.print_exc()
        status = 1
 
sys.exit(status)




在python中实现基于ICE框架的client、server模型

标签:python   ice   

原文地址:http://blog.csdn.net/yuchen162009/article/details/45098405

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!