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 更新的《强袭风暴》中,玩家将会进入一个全新的海盗主题大逃杀式限时活动,其中包含极高的风险和史诗级的奖励。
《强袭风暴》不是普通的战场,作为一个独立于主游戏之外的活动,玩家可以用大逃杀的风格来体验《魔兽世界》,不分职业、不分装备(除了你在赛局中捡到的),光是技巧和战略的强弱之分就能决定出谁才是能坚持到最后的赢家。本次活动将会开放单人和双人模式,玩家在加入海盗主题的预赛大厅区域前,可以从强袭风暴角色画面新增好友。游玩游戏将可以累计名望轨迹,《巨龙崛起》和《魔兽世界:巫妖王之怒 经典版》的玩家都可以获得奖励。
更新日志
- 中国武警男声合唱团《辉煌之声1天路》[DTS-WAV分轨]
- 紫薇《旧曲新韵》[320K/MP3][175.29MB]
- 紫薇《旧曲新韵》[FLAC/分轨][550.18MB]
- 周深《反深代词》[先听版][320K/MP3][72.71MB]
- 李佳薇.2024-会发光的【黑籁音乐】【FLAC分轨】
- 后弦.2012-很有爱【天浩盛世】【WAV+CUE】
- 林俊吉.2012-将你惜命命【美华】【WAV+CUE】
- 晓雅《分享》DTS-WAV
- 黑鸭子2008-飞歌[首版][WAV+CUE]
- 黄乙玲1989-水泼落地难收回[日本天龙版][WAV+CUE]
- 周深《反深代词》[先听版][FLAC/分轨][310.97MB]
- 姜育恒1984《什么时候·串起又散落》台湾复刻版[WAV+CUE][1G]
- 那英《如今》引进版[WAV+CUE][1G]
- 蔡幸娟.1991-真的让我爱你吗【飞碟】【WAV+CUE】
- 群星.2024-好团圆电视剧原声带【TME】【FLAC分轨】