Zeroc Ice简介
"_blank" href="https://zeroc.com/distributions/ice" rel="external nofollow" >Zeroc ICE的文档相应调整。
安装Zeroc Ice
"htmlcode">
sudo apt-key adv --keyserver keyserver.ubuntu.com --recv 5E6DA83306132997 sudo apt-add-repository "deb http://zeroc.com/download/apt/ubuntu$(lsb_release -rs) stable main" sudo apt-get update sudo apt-get install zeroc-ice-all-runtime zeroc-ice-all-dev
"htmlcode">
sudo -H pip install zeroc-ice
"htmlcode">
sudo apt-get install python-dev sudo apt-get install libssl-dev sudo apt-get install libbz2-dev
开发Server和Client
"htmlcode">
// Printer.ice module Demo { interface Printer { string printString(string s); }; };
生成指定语言的接口文件
"htmlcode">
import sys, traceback, Ice import Demo # PrinterI是接口实现类,Demo.Printer是slice2py生成的接口 class PrinterI(Demo.Printer): def printString(self, s, current=None): print(s) return "Server Printed: " + s status = 0 ic = None try: # 初始化zeroc ice环境 ic = Ice.initialize(sys.argv) # 生成名为SimplePrinterAdapter的对象适配器,连接方式是缺省的tcp,监听端口10000 adapter = ic.createObjectAdapterWithEndpoints("SimplePrinterAdapter", "default -p 10000") # 生成接口的实现对象,并以指定的名字SimplePrinter添加到对象适配器中 object = PrinterI() adapter.add(object, ic.stringToIdentity("SimplePrinter")) # 激活对象适配器 adapter.activate() # 使得本服务器的调用线程在此暂停,直至ice服务结束,或者进程结束 ic.waitForShutdown() except: traceback.print_exc() status = 1 if ic: # Clean up try: ic.destroy() except: traceback.print_exc() status = 1 sys.exit(status)
"htmlcode">
PrinterAdapter.AdapterId=PrinterAdapter PrinterAdapter.Endpoints=tcp
"htmlcode">
import sys, traceback, Ice import Demo status = 0 ic = None try: ic = Ice.initialize(sys.argv) # 生成名为SimplePrinter代理对象,且通过tcp调用,连接目标机器的10000端口 base = ic.stringToProxy("SimplePrinter:default -p 10000") # 将代理对象转换成目标对象 printer = Demo.PrinterPrx.checkedCast(base) if not printer: raise RuntimeError("Invalid proxy") # 调用服务器的printString方法,并输出返回结果 rs = printer.printString("Hello World, I'm talking to you through RPC") print(rs) except: traceback.print_exc() status = 1 if ic: # Clean up try: ic.destroy() except: traceback.print_exc() status = 1 sys.exit(status)
"htmlcode">
Ice.Default.Locator=SzcIceGrid/Locator:tcp -h 127.0.0.1 -p 4061
客户端直连服务端
配置注册中心
registry.cfg(服务注册中心的配置文件)
IceGrid.InstanceName=SzcIceGrid #客户端连接到注册中心的地址 IceGrid.Registry.Client.Endpoints=tcp -p 4061 IceGrid.Registry.Server.Endpoints=tcp IceGrid.Registry.Internal.Endpoints=tcp IceGrid.Registry.PermissionsVerifier=SzcIceGrid/NullPermissionsVerifier IceGrid.Registry.AdminPermissionsVerifier=SzcIceGrid/NullPermissionsVerifier #注册中心数据保存路径,需要手动创建文件夹 IceGrid.Registry.Data=/home/rocway/test/zerocice/registry IceGrid.Registry.DynamicRegistration=1 Ice.Admin.InstanceName=AdminInstance Ice.Admin.ServerId=Admin
注意:手工创建文件中的路径。
配置节点
"htmlcode">
# 注册中心地址 Ice.Default.Locator=SzcIceGrid/Locator:tcp -h 127.0.0.1 -p 4061 #node名 IceGrid.Node.Name=node1 IceGrid.Node.Endpoints=tcp #node存储路径 IceGrid.Node.Data=/home/rocway/test/zerocice/nodes/node1 IceGrid.Node.Output=/home/rocway/test/zerocice/nodes/node1 IceGrid.Node.CollocateRegistry=0
注意:手工创建上述文件中提到的路径。其中服务端程序的输出会保存在Ouput指向路径的*.out文件中。
应用描述文件
"htmlcode">
<icegrid> <application name="PrinterApplication"> <node name="node1"> <server id="PrinterServer" exe="python" activation="on-demand"> <adapter name="PrinterAdapter" endpoints="tcp -h 127.0.0.1"> <object identity="SimplePrinter" type="::Demo::Printer" property="Identity"/> </adapter> <option>/home/rocway/test/zerocice/Server.py</option> <property name="Ice.Trace.Network" value="1"/> <properties> <property name="Ice.ThreadPool.Server.SizeMax" value="1" /> </properties> <property name="IceMX.Metrics.Debug.GroupBy" value="id"/> <property name="IceMX.Metrics.Debug.Disabled" value="1"/> <property name="IceMX.Metrics.ByParent.GroupBy" value="parent"/> <property name="IceMX.Metrics.ByParent.Disabled" value="1"/> </server> </node> </application> </icegrid>
启动icegrid
1.启动icegrid注册中心
icegridregistry --Ice.Config=registry.cfg
2.启动某个节点
icegridnode --Ice.Config=node1.cfg
3.启动节点上的应用管理程序, 并添加应用
icegridadmin --Ice.Config=node1.cfg
application add app.xml
4.查看已经添加的应用
application describe PrinterApplication
5.启动各节点上的应用服务
icegridgui
6.运行客户端程序
python Client.py
实验总结
此次实验实现了在icegrid上部署服务程序,客户端通过icegrid的服务注册中心调用该服务。实验中服务端和客户端使用的都是Python,有兴趣的同学也可以分别使用不同的语言开发服务端和客户端,尝试一下Zeroc ICE的跨语言RPC调用。
本次实验就到这里,有关Zeroc ICE的其他内容请关注后续的课程。
以上就是如何用python开发Zeroc Ice应用的详细内容,更多关于python开发Zeroc Ice应用的资料请关注其它相关文章!
《魔兽世界》大逃杀!60人新游玩模式《强袭风暴》3月21日上线
暴雪近日发布了《魔兽世界》10.2.6 更新内容,新游玩模式《强袭风暴》即将于3月21 日在亚服上线,届时玩家将前往阿拉希高地展开一场 60 人大逃杀对战。
艾泽拉斯的冒险者已经征服了艾泽拉斯的大地及遥远的彼岸。他们在对抗世界上最致命的敌人时展现出过人的手腕,并且成功阻止终结宇宙等级的威胁。当他们在为即将于《魔兽世界》资料片《地心之战》中来袭的萨拉塔斯势力做战斗准备时,他们还需要在熟悉的阿拉希高地面对一个全新的敌人──那就是彼此。在《巨龙崛起》10.2.6 更新的《强袭风暴》中,玩家将会进入一个全新的海盗主题大逃杀式限时活动,其中包含极高的风险和史诗级的奖励。
《强袭风暴》不是普通的战场,作为一个独立于主游戏之外的活动,玩家可以用大逃杀的风格来体验《魔兽世界》,不分职业、不分装备(除了你在赛局中捡到的),光是技巧和战略的强弱之分就能决定出谁才是能坚持到最后的赢家。本次活动将会开放单人和双人模式,玩家在加入海盗主题的预赛大厅区域前,可以从强袭风暴角色画面新增好友。游玩游戏将可以累计名望轨迹,《巨龙崛起》和《魔兽世界:巫妖王之怒 经典版》的玩家都可以获得奖励。
更新动态
- 凤飞飞《我们的主题曲》飞跃制作[正版原抓WAV+CUE]
- 刘嘉亮《亮情歌2》[WAV+CUE][1G]
- 红馆40·谭咏麟《歌者恋歌浓情30年演唱会》3CD[低速原抓WAV+CUE][1.8G]
- 刘纬武《睡眠宝宝竖琴童谣 吉卜力工作室 白噪音安抚》[320K/MP3][193.25MB]
- 【轻音乐】曼托凡尼乐团《精选辑》2CD.1998[FLAC+CUE整轨]
- 邝美云《心中有爱》1989年香港DMIJP版1MTO东芝首版[WAV+CUE]
- 群星《情叹-发烧女声DSD》天籁女声发烧碟[WAV+CUE]
- 刘纬武《睡眠宝宝竖琴童谣 吉卜力工作室 白噪音安抚》[FLAC/分轨][748.03MB]
- 理想混蛋《Origin Sessions》[320K/MP3][37.47MB]
- 公馆青少年《我其实一点都不酷》[320K/MP3][78.78MB]
- 群星《情叹-发烧男声DSD》最值得珍藏的完美男声[WAV+CUE]
- 群星《国韵飘香·贵妃醉酒HQCD黑胶王》2CD[WAV]
- 卫兰《DAUGHTER》【低速原抓WAV+CUE】
- 公馆青少年《我其实一点都不酷》[FLAC/分轨][398.22MB]
- ZWEI《迟暮的花 (Explicit)》[320K/MP3][57.16MB]