ICE (Internet Communication Engine) 是zeroc公司实现的通信中间件
几大特性:
1. 多语言支持C++、Java、python, C#等,
2. 对分布式系统的支持,涵盖了负载均衡、位置服务、计算节点需要实时启动等特性。
3. 提供了基于发布-订阅机制的消息组建ICEStorm
一、书写slice文件,然要按照slice规定的语法来实现
Printer.ice
module
Demo {
interface
Printer {
void printString(string
s);
};
};
二、 编译slice代码,官方教程提供了命令行的编译方式:
slice2py Printer.ice
这种方法还需要额外安装slice2py命令,为了省事没有采用这种方法,我们采用的是在程序中动态的加载slice文件并编译它。
三、实现服务端代码
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
四、实现客户端
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)
扫码关注腾讯云开发者
领取腾讯云代金券
Copyright © 2013 - 2025 Tencent Cloud. All Rights Reserved. 腾讯云 版权所有
深圳市腾讯计算机系统有限公司 ICP备案/许可证号:粤B2-20090059 深公网安备号 44030502008569
腾讯云计算(北京)有限责任公司 京ICP证150476号 | 京ICP备11018762号 | 京公网安备号11010802020287
Copyright © 2013 - 2025 Tencent Cloud.
All Rights Reserved. 腾讯云 版权所有