前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >在python中实现基于ICE框架的cl

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

作者头像
py3study
发布2020-01-03 16:30:07
2K0
发布2020-01-03 16:30:07
举报
文章被收录于专栏:python3python3

ICE (Internet Communication Engine) 是zeroc公司实现的通信中间件

几大特性:

    1. 多语言支持C++、Java、python, C#等,

    2.  对分布式系统的支持,涵盖了负载均衡、位置服务、计算节点需要实时启动等特性。

    3.  提供了基于发布-订阅机制的消息组建ICEStorm

一、书写slice文件,然要按照slice规定的语法来实现

Printer.ice

代码语言:javascript
复制
module
 Demo {
    interface
 Printer {
        void printString(string
 s);
    };
};

二、 编译slice代码,官方教程提供了命令行的编译方式:

    ​slice2py Printer.ice

这种方法还需要额外安装slice2py命令,为了省事没有采用这种方法,我们采用的是在程序中动态的加载slice文件并编译它。

三、实现服务端代码

代码语言:javascript
复制
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

四、实现客户端

代码语言:javascript
复制
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)
本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2019-09-24 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
负载均衡
负载均衡(Cloud Load Balancer,CLB)提供安全快捷的流量分发服务,访问流量经由 CLB 可以自动分配到云中的多台后端服务器上,扩展系统的服务能力并消除单点故障。负载均衡支持亿级连接和千万级并发,可轻松应对大流量访问,满足业务需求。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档