文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

在python中实现基于ICE框架的cl

2023-01-31 07:50

关注

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)




阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     807人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     351人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     314人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     433人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     221人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯