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应用的资料请关注其它相关文章!
稳了!魔兽国服回归的3条重磅消息!官宣时间再确认!
昨天有一位朋友在大神群里分享,自己亚服账号被封号之后居然弹出了国服的封号信息对话框。
这里面让他访问的是一个国服的战网网址,com.cn和后面的zh都非常明白地表明这就是国服战网。
而他在复制这个网址并且进行登录之后,确实是网易的网址,也就是我们熟悉的停服之后国服发布的暴雪游戏产品运营到期开放退款的说明。这是一件比较奇怪的事情,因为以前都没有出现这样的情况,现在突然提示跳转到国服战网的网址,是不是说明了简体中文客户端已经开始进行更新了呢?
更新日志
- 好薇2024《兵哥哥》1:124K黄金母盘[WAV+CUE]
- 胡歌.2006-珍惜(EP)【步升大风】【FLAC分轨】
- 洪荣宏.2014-拼乎自己看【华特】【WAV+CUE】
- 伊能静.1999-从脆弱到勇敢1987-1996精选2CD【华纳】【WAV+CUE】
- 刘亮鹭《汽车DJ玩主》[WAV+CUE][1.1G]
- 张杰《最接近天堂的地方》天娱传媒[WAV+CUE][1.1G]
- 群星《2022年度发烧天碟》无损黑胶碟 2CD[WAV+CUE][1.4G]
- 罗文1983-罗文甄妮-射雕英雄传(纯银AMCD)[WAV+CUE]
- 群星《亚洲故事香港纯弦》雨果UPMAGCD2024[低速原抓WAV+CUE]
- 群星《经典咏流传》限量1:1母盘直刻[低速原抓WAV+CUE]
- 庾澄庆1993《老实情歌》福茂唱片[WAV+CUE][1G]
- 许巍《在别处》美卡首版[WAV+CUE][1G]
- 林子祥《单手拍掌》华纳香港版[WAV+CUE][1G]
- 郑秀文.1997-我们的主题曲【华纳】【WAV+CUE】
- 群星.2001-生命因爱动听电影原创音乐AVCD【MEDIA】【WAV+CUE】