电脑知识|欧美黑人一区二区三区|软件|欧美黑人一级爽快片淫片高清|系统|欧美黑人狂野猛交老妇|数据库|服务器|编程开发|网络运营|知识问答|技术教程文章 - 好吧啦网

您的位置:首頁技術(shù)文章
文章詳情頁

如何用python開發(fā)Zeroc Ice應(yīng)用

瀏覽:8日期:2022-06-28 18:21:35
Zeroc Ice簡介

  Zeroc ICE(Internet Communications Engine ,互聯(lián)網(wǎng)通信引擎)是目前功能比較強(qiáng)大和完善的RPC框架,支持跨平臺、跨語言調(diào)用。它非常靈活,可以通過TCP、UDP、SSL/TSL或WebSocket連接,支持同步、異步調(diào)用,以及服務(wù)器和客戶端之間的雙向連接。Zeroc ICE的效率非常高,它使用一種高效的二進(jìn)制協(xié)議,對帶寬的消耗比較小。甚至對于通過衛(wèi)星的RPC調(diào)用,Zeroc ICE還可以對數(shù)據(jù)流進(jìn)一步壓縮。另外Zeroc ICE還可以在不解包的情況下轉(zhuǎn)發(fā)調(diào)用請求,省去普通轉(zhuǎn)發(fā)時的解包、重新壓包的時間。  Zeroc ICE的應(yīng)用還可以部署在icegrid上,實(shí)現(xiàn)網(wǎng)格計算,即客戶端調(diào)用時不必指定目標(biāo)主機(jī),由ICE負(fù)責(zé)查找;服務(wù)端也可以在調(diào)用時才開啟,動態(tài)加載;同樣的服務(wù)也可以部署多個,實(shí)現(xiàn)高可用。

實(shí)驗簡介

  Zeroc ICE支持跨語言RPC調(diào)用,包括C++、C#、Java、JavaScript、Python、Objective-C、Ruby、PHP、VB等。本次實(shí)驗采用Python(Pyhon 2.7以上,或者Python 3都可以)。實(shí)驗的內(nèi)容是在icegrid上部署一個簡單的服務(wù)器,當(dāng)客戶端調(diào)用時輸出指定內(nèi)容,并返回一個字符串。實(shí)驗步驟如下:

安裝Zeroc ICE 開發(fā)服務(wù)端和客戶端程序 部署到icegrid 客戶端調(diào)用 環(huán)境準(zhǔn)備

   本次實(shí)驗采用的操作系統(tǒng)是Ubuntu 14.04。如果使用其他操作系統(tǒng),可以根據(jù)Zeroc ICE的文檔相應(yīng)調(diào)整。

安裝Zeroc Ice

   如果系統(tǒng)中沒有安裝Zeroc ICE,并且ubuntu的軟件源中也沒有zeroc ice,可以按照下面的步驟安裝。

sudo apt-key adv --keyserver keyserver.ubuntu.com --recv 5E6DA83306132997sudo apt-add-repository 'deb http://zeroc.com/download/apt/ubuntu$(lsb_release -rs) stable main'sudo apt-get updatesudo apt-get install zeroc-ice-all-runtime zeroc-ice-all-dev

  安裝之后系統(tǒng)中就有了slice2cpp、slice2java等Sliece(Zeroc ICE定義的接口描述語言,IDL)文件到相應(yīng)語言的轉(zhuǎn)換程序,以及icegrid、iceregistry、icegridadmin等程序。如果缺少目標(biāo)語言的工具(例如slice2py)或開發(fā)包,還需要特別安裝。

安裝Zeroc ICE的python開發(fā)包

  當(dāng)然在這一步之前應(yīng)當(dāng)首先安裝python和pip(python的依賴管理工具),此處略。Zeroc ICE的python開發(fā)包(或者模塊)叫zeroc-ice,可以使用pip安裝。

sudo -H pip install zeroc-ice

  安裝過程中可能出現(xiàn)缺少某些C/C++頭文件的問題,例如缺少python.h、openssl/ssl.h、bzlib.h,這些都是因為沒有安裝相應(yīng)的開發(fā)包。可以通過如下的命令解決:

sudo apt-get install python-devsudo apt-get install libssl-devsudo apt-get install libbz2-dev開發(fā)Server和Client

  下面即是真正的服務(wù)端和客戶端開發(fā)。開發(fā)過程通常是:

使用Slice語言定義語言無關(guān)的接口文件 轉(zhuǎn)換成指定語言的接口文件 根據(jù)接口文件開發(fā)服務(wù)端和客戶端程序 書寫服務(wù)端和客戶端的配置文件 使用slice語言定義接口

// Printer.icemodule Demo { interface Printer { string printString(string s); };};生成指定語言的接口文件

  本次開發(fā)采用的語言是python,所以使用

slice2py Printer.ice

  其他語言可以依此類推,例如slice2java,slice2cpp。  命令執(zhí)行成功,可以看到在目標(biāo)目錄中生成了一個Printer_ice.py文件,以及一個Demo目錄。Demo是slice接口文件中定義的module名稱。

編寫服務(wù)器

import sys, traceback, Ice import Demo# PrinterI是接口實(shí)現(xiàn)類,Demo.Printer是slice2py生成的接口class PrinterI(Demo.Printer): def printString(self, s, current=None): print(s) return 'Server Printed: ' + s status = 0 ic = Nonetry: # 初始化zeroc ice環(huán)境 ic = Ice.initialize(sys.argv) # 生成名為SimplePrinterAdapter的對象適配器,連接方式是缺省的tcp,監(jiān)聽端口10000 adapter = ic.createObjectAdapterWithEndpoints('SimplePrinterAdapter', 'default -p 10000') # 生成接口的實(shí)現(xiàn)對象,并以指定的名字SimplePrinter添加到對象適配器中 object = PrinterI() adapter.add(object, ic.stringToIdentity('SimplePrinter')) # 激活對象適配器 adapter.activate() # 使得本服務(wù)器的調(diào)用線程在此暫停,直至ice服務(wù)結(jié)束,或者進(jìn)程結(jié)束 ic.waitForShutdown()except: traceback.print_exc() status = 1 if ic: # Clean up try: ic.destroy() except: traceback.print_exc() status = 1 sys.exit(status)

  server.cfg內(nèi)容如下:

PrinterAdapter.AdapterId=PrinterAdapterPrinterAdapter.Endpoints=tcp

  其中tcp的意思通過tcp協(xié)議調(diào)用,服務(wù)器監(jiān)聽來自tcp協(xié)議的連接請求。

編寫客戶端

import sys, traceback, Ice import Demostatus = 0 ic = Nonetry: ic = Ice.initialize(sys.argv) # 生成名為SimplePrinter代理對象,且通過tcp調(diào)用,連接目標(biāo)機(jī)器的10000端口 base = ic.stringToProxy('SimplePrinter:default -p 10000') # 將代理對象轉(zhuǎn)換成目標(biāo)對象 printer = Demo.PrinterPrx.checkedCast(base) if not printer: raise RuntimeError('Invalid proxy') # 調(diào)用服務(wù)器的printString方法,并輸出返回結(jié)果 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)

  客戶端的配置文件如下:

Ice.Default.Locator=SzcIceGrid/Locator:tcp -h 127.0.0.1 -p 4061客戶端直連服務(wù)端

  上述程序開發(fā)完畢之后不用部署到icegrid就可以直接運(yùn)行,配置文件是用來在icegrid上定位和連接服務(wù)。此時可以一邊運(yùn)行服務(wù)端,一邊運(yùn)行客戶端,檢驗一下它們的功能。

python Server.py

  運(yùn)行之后可以看到進(jìn)程并沒有結(jié)束,一直在等待連接。然后另起一個終端,運(yùn)行客戶端程序。

python Client.py

  運(yùn)行之后可以看到服務(wù)端和客戶端窗口的輸出。

部署到icegrid

  icegrid是Zeroc ICE的云計算解決方案。它可以將各種服務(wù)端部署在多臺機(jī)器上,并為客戶端調(diào)用提供服務(wù)定位、服務(wù)激活、負(fù)載均衡、故障轉(zhuǎn)移等服務(wù)。客戶端只要連接到指定的服務(wù)注冊中心,就可以根據(jù)服務(wù)名稱(這里是SimplePrinter),以及連接協(xié)議(Endpoints,這里是tcp)就可以找到相應(yīng)的服務(wù)。服務(wù)在注冊時也不必處在運(yùn)行狀態(tài),可以由icegrid根據(jù)調(diào)用請求,自動啟動。

如何用python開發(fā)Zeroc Ice應(yīng)用

配置注冊中心

registry.cfg(服務(wù)注冊中心的配置文件)

IceGrid.InstanceName=SzcIceGrid #客戶端連接到注冊中心的地址 IceGrid.Registry.Client.Endpoints=tcp -p 4061IceGrid.Registry.Server.Endpoints=tcpIceGrid.Registry.Internal.Endpoints=tcpIceGrid.Registry.PermissionsVerifier=SzcIceGrid/NullPermissionsVerifierIceGrid.Registry.AdminPermissionsVerifier=SzcIceGrid/NullPermissionsVerifier#注冊中心數(shù)據(jù)保存路徑,需要手動創(chuàng)建文件夾IceGrid.Registry.Data=/home/rocway/test/zerocice/registryIceGrid.Registry.DynamicRegistration=1Ice.Admin.InstanceName=AdminInstanceIce.Admin.ServerId=Admin

注意:手工創(chuàng)建文件中的路徑。

配置節(jié)點(diǎn)

  節(jié)點(diǎn)是服務(wù)所在的機(jī)器。在實(shí)際生產(chǎn)環(huán)境中,服務(wù)注冊中心也可以運(yùn)行在其中某個節(jié)點(diǎn)上。node1.cfg(服務(wù)所在節(jié)點(diǎn)的配置文件)

# 注冊中心地址 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/node1IceGrid.Node.Output=/home/rocway/test/zerocice/nodes/node1IceGrid.Node.CollocateRegistry=0

注意:手工創(chuàng)建上述文件中提到的路徑。其中服務(wù)端程序的輸出會保存在Ouput指向路徑的*.out文件中。

應(yīng)用描述文件

  應(yīng)用描述文件用來描述服務(wù)端程序在icegrid中的部署情況。包括應(yīng)用的名稱、服務(wù)程序的路徑、執(zhí)行參數(shù)等等。app.xml

<icegrid> <application name='PrinterApplication'> <node name='node1'> <server 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.啟動某個節(jié)點(diǎn)

icegridnode --Ice.Config=node1.cfg

3.啟動節(jié)點(diǎn)上的應(yīng)用管理程序, 并添加應(yīng)用

icegridadmin --Ice.Config=node1.cfg

application add app.xml

4.查看已經(jīng)添加的應(yīng)用

application describe PrinterApplication

5.啟動各節(jié)點(diǎn)上的應(yīng)用服務(wù)

icegridgui

6.運(yùn)行客戶端程序

python Client.py

實(shí)驗總結(jié)

  此次實(shí)驗實(shí)現(xiàn)了在icegrid上部署服務(wù)程序,客戶端通過icegrid的服務(wù)注冊中心調(diào)用該服務(wù)。實(shí)驗中服務(wù)端和客戶端使用的都是Python,有興趣的同學(xué)也可以分別使用不同的語言開發(fā)服務(wù)端和客戶端,嘗試一下Zeroc ICE的跨語言RPC調(diào)用。  本次實(shí)驗就到這里,有關(guān)Zeroc ICE的其他內(nèi)容請關(guān)注后續(xù)的課程。

以上就是如何用python開發(fā)Zeroc Ice應(yīng)用的詳細(xì)內(nèi)容,更多關(guān)于python開發(fā)Zeroc Ice應(yīng)用的資料請關(guān)注好吧啦網(wǎng)其它相關(guān)文章!

標(biāo)簽: Python 編程
相關(guān)文章:
主站蜘蛛池模板: 广州印刷厂_广州彩印厂-广州艺彩印务有限公司 | 存包柜厂家_电子存包柜_超市存包柜_超市电子存包柜_自动存包柜-洛阳中星 | 帽子厂家_帽子工厂_帽子定做_义乌帽厂_帽厂_制帽厂_帽子厂_浙江高普制帽厂 | 玻璃钢型材-玻璃钢风管-玻璃钢管道,生产厂家-[江苏欧升玻璃钢制造有限公司] | 新型锤式破碎机_新型圆锥式_新型颚式破碎机_反击式打沙机_锤式制砂机_青州建源机械 | 全自动端子机|刺破式端子压接机|全自动双头沾锡机|全自动插胶壳端子机-东莞市傅氏兄弟机械设备有限公司 | 爱佩恒温恒湿测试箱|高低温实验箱|高低温冲击试验箱|冷热冲击试验箱-您身边的模拟环境试验设备技术专家-合作热线:400-6727-800-广东爱佩试验设备有限公司 | 北京翻译公司_同传翻译_字幕翻译_合同翻译_英语陪同翻译_影视翻译_翻译盖章-译铭信息 | 步进驱动器「一体化」步进电机品牌厂家-一体式步进驱动 | 超声波流量计_流量标准装置生产厂家 _河南盛天精密测控 | 低合金板|安阳低合金板|河南低合金板|高强度板|桥梁板_安阳润兴 北京租车牌|京牌指标租赁|小客车指标出租 | 储气罐,真空罐,缓冲罐,隔膜气压罐厂家批发价格,空压机储气罐规格型号-上海申容压力容器集团有限公司 | 全自动实验室洗瓶机,移液管|培养皿|进样瓶清洗机,清洗剂-广州摩特伟希尔机械设备有限责任公司 | 诸城网站建设-网络推广-网站优化-阿里巴巴托管-诸城恒泰互联 | 合肥白癜风医院_[治疗白癜风]哪家好_合肥北大白癜风医院 | 防水套管-柔性防水套管-刚性防水套管-上海执品管件有限公司 | 打包钢带,铁皮打包带,烤蓝打包带-高密市金和金属制品厂 | 电子天平-华志电子天平厂家 | 首页-瓜尔胶系列-化工单体系列-油田压裂助剂-瓜尔胶厂家-山东广浦生物科技有限公司 | 网站建设,北京网站建设,北京网站建设公司,网站系统开发,北京网站制作公司,响应式网站,做网站公司,海淀做网站,朝阳做网站,昌平做网站,建站公司 | 气动|电动调节阀|球阀|蝶阀-自力式调节阀-上海渠工阀门管道工程有限公司 | 水稻烘干机,小麦烘干机,大豆烘干机,玉米烘干机,粮食烘干机_巩义市锦华粮食烘干机械制造有限公司 水环真空泵厂家,2bv真空泵,2be真空泵-淄博真空设备厂 | 小程序开发公司_APP开发多少钱_软件开发定制_微信小程序制作_客户销售管理软件-济南小溪畅流网络科技有限公司 | 蜗轮丝杆升降机-螺旋升降机-丝杠升降机厂家-润驰传动 | 全自动在线分板机_铣刀式在线分板机_曲线分板机_PCB分板机-东莞市亿协自动化设备有限公司 | 黑龙江京科脑康医院-哈尔滨精神病医院哪家好_哈尔滨精神科医院排名_黑龙江精神心理病专科医院 | 固诺家居-全屋定制十大品牌_整体衣柜木门橱柜招商加盟 | 电位器_轻触开关_USB连接器_广东精密龙电子科技有限公司 | 注塑机-压铸机-塑料注塑机-卧式注塑机-高速注塑机-单缸注塑机厂家-广东联升精密智能装备科技有限公司 | 沈阳网站建设_沈阳网站制作_沈阳网页设计-做网站就找示剑新零售 沈阳缠绕膜价格_沈阳拉伸膜厂家_沈阳缠绕膜厂家直销 | 湖南档案密集架,智能,物证,移动,价格-湖南档案密集架厂家 | 济南ISO9000认证咨询代理公司,ISO9001认证,CMA实验室认证,ISO/TS16949认证,服务体系认证,资产管理体系认证,SC食品生产许可证- 济南创远企业管理咨询有限公司 郑州电线电缆厂家-防火|低压|低烟无卤电缆-河南明星电缆 | 无锡网站建设_小程序制作_网站设计公司_无锡网络公司_网站制作 | 武汉刮刮奖_刮刮卡印刷厂_为企业提供门票印刷_武汉合格证印刷_现金劵代金券印刷制作 - 武汉泽雅印刷有限公司 | 磁力轮,磁力联轴器,磁齿轮,钕铁硼磁铁-北京磁运达厂家 | 天津货架厂_穿梭车货架_重型仓储货架_阁楼货架定制-天津钢力仓储货架生产厂家_天津钢力智能仓储装备 | 高速混合机_锂电混合机_VC高效混合机-无锡鑫海干燥粉体设备有限公司 | ASA膜,ASA共挤料,篷布色母料-青岛未来化学有限公司 | 实验室隔膜泵-无油防腐蚀隔膜泵-耐腐蚀隔膜真空泵-杭州景程仪器 电杆荷载挠度测试仪-电杆荷载位移-管桩测试仪-北京绿野创能机电设备有限公司 | 德国BOSCH电磁阀-德国HERION电磁阀-JOUCOMATIC电磁阀|乾拓百科 | 365文案网_全网创意文案句子素材站 |