版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
第python使用SimpleXMLRPCServer實(shí)現(xiàn)簡單的rpc過程目錄使用SimpleXMLRPCServer實(shí)現(xiàn)rpc模塊定義方法python與rpc服務(wù)1.什么是RPC2.xmlrp庫
使用SimpleXMLRPCServer實(shí)現(xiàn)rpc
模塊
SimpleXMLRPCServer
python標(biāo)準(zhǔn)庫中自帶的模塊,無需另外安裝
在python3中SimpleXMLRPCServer已經(jīng)被合并到xmlrpc.server
定義
classSimpleXMLRPCServer.SimpleXMLRPCServer(addr[,requestHandler[,logRequests[,allow_none[,encoding[,bind_and_activate]]]])
方法
1.SimpleXMLRPCServer.register_function(function[,name])
注冊一個(gè)方法,服務(wù)
2.SimpleXMLRPCServer.register_instance(instance[,allow_dotted_names])
注冊實(shí)例一個(gè)對象在register_function注冊后則,不能再在register_instance注冊
3.SimpleXMLRPCServer.register_introspection_functions()
注冊一個(gè)反函數(shù)
4.SimpleXMLRPCServer.register_multicall_functions()
注冊復(fù)合函數(shù)
例如:
服務(wù)端
fromSimpleXMLRPCServerimportSimpleXMLRPCServer
defrespon_string(str):
return"getstring:%s"%str
if__name__=='__main__':
s=SimpleXMLRPCServer(('',8080))
s.register_function(respon_string,"get_string")
s.serve_forever()
客服端
fromxmlrpclibimportServerProxy
if__name__=='__main__':
s=ServerProxy(":8080")
prints.get_string("hello")
結(jié)果:
getstring:hello
服務(wù)端:
#coding=utf8
fromSimpleXMLRPCServerimportSimpleXMLRPCServer
fromSimpleXMLRPCServerimportSimpleXMLRPCRequestHandler
classRequestHandler(SimpleXMLRPCRequestHandler):
rpc_paths=('/RPC2',)
server=SimpleXMLRPCServer(("",8000),
requestHandler=RequestHandler)
print"startserviceon:8000"
server.register_introspection_functions()
#注冊pow,冪運(yùn)算,實(shí)際調(diào)用的是已有的算數(shù)pow()
server.register_function(pow)
defadd(x,y):
returnx+y
server.register_function(add,'add')
#注方法在xml-rpc中都是public的
classfun:
defdiv(self,x,y):
returnx//y
server.register_instance(fun())
server.serve_forever()
客服端:
可以使用下面的方法調(diào)用:
importxmlrpclib
s=xmlrpclib.ServerProxy(':8000')
prints.pow(3,5)
prints.add(3,9)
prints.div(7,3)
prints.system.listMethods()
結(jié)果:
243
12
2
[add,div,pow,system.listMethods,system.methodHelp,system.methodSignature]
register_multicall_functions實(shí)現(xiàn)復(fù)合調(diào)用,多個(gè)方法注冊到一個(gè)調(diào)用里
#coding=utf8
fromSimpleXMLRPCServerimportSimpleXMLRPCServer
server=SimpleXMLRPCServer(("",8000))
server.register_function(pow)
server.register_function(lambdax,y:x+y,'add')
server.register_multicall_functions()
server.serve_forever()
MultiCall調(diào)用復(fù)合方法
importxmlrpclib
s=xmlrpclib.ServerProxy(":8000")
prints
multi=xmlrpclib.MultiCall(s)
multi.pow(2,5)
forresponseinmulti():
printresponse
exceptError,err:
print"ERROR",err
結(jié)果:
ServerProxyfor:8000/RPC2
32
python與rpc服務(wù)
RPC
1.什么是RPC
RPC就是為解決服務(wù)之間信息交互而發(fā)明和存在的。
RPC(RemoteProcedureCall)遠(yuǎn)程過程調(diào)用,它是一種通過網(wǎng)絡(luò)從遠(yuǎn)程計(jì)算機(jī)程序上請求服務(wù),而不需要了解底層網(wǎng)絡(luò)技術(shù)的協(xié)議。
RPC采用客戶機(jī)/服務(wù)器模式。請求程序就是一個(gè)客戶機(jī),而服務(wù)提供程序就是一個(gè)服務(wù)器。
首先,客戶機(jī)調(diào)用進(jìn)程發(fā)送一個(gè)有進(jìn)程參數(shù)的調(diào)用信息到服務(wù)進(jìn)程,然后等待應(yīng)答信息。
在服務(wù)器端,進(jìn)程保持睡眠狀態(tài)直到調(diào)用信息到達(dá)為止。
當(dāng)一個(gè)調(diào)用信息到達(dá),服務(wù)器獲得進(jìn)程參數(shù),計(jì)算結(jié)果,發(fā)送答復(fù)信息
然后等待下一個(gè)調(diào)用信息,最后,客戶端調(diào)用進(jìn)程接收答復(fù)信息,獲得進(jìn)程結(jié)果,然后調(diào)用執(zhí)行繼續(xù)進(jìn)行。
RPC就是一種遠(yuǎn)程調(diào)用函數(shù)接口的方式,說白了,就是一種遠(yuǎn)程調(diào)用函數(shù)接口的方式,客戶端和服務(wù)端之間約定一種契約(函數(shù)接口),然后服務(wù)端一直等待客戶端的調(diào)用。
有點(diǎn)像平常的WEB網(wǎng)絡(luò)請求。
一種用途是在多臺服務(wù)器之間互相進(jìn)行調(diào)用。
另一個(gè)用途則在于,不同編程語言之間都支持這種方式,像Python更是內(nèi)置對其的支持,不需要額外安裝什么庫,所以可以直接在多語言的服務(wù)器之間互相進(jìn)行調(diào)用。
Socket編程就是RPC通信
2.xmlrp庫
簡單的服務(wù)端
像web請求一樣,我們需要確定供客戶端訪問的url和端口號,以及供客戶端調(diào)用的方法實(shí)現(xiàn),最后要讓我們服務(wù)器一直處于等待被訪問的狀態(tài):
rpc_server.py
fromxmlrpc.serverimportSimpleXMLRPCServer
調(diào)用函數(shù)
defrespon_string(str):
return“getstring:%s”%str
ifname==‘main':
server=SimpleXMLRPCServer((‘localhost',8888))#初始化
server.register_function(respon_string,“get_string”)#注冊get_string函數(shù)
print(“ListeningforClient”)
server.serve_forever()#保持等待調(diào)用狀態(tài)
rpc_client.py
fromxmlrpc.clientimportServerProxy
ifname==‘main':
server=ServerProxy(“http://localhost:8888”)#初始化服務(wù)器
print(server.get_string(“RPCRPC”))#調(diào)用get_string函數(shù)并傳參,調(diào)用get_string讓服務(wù)端通過res
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 魯濱遜題目及答案100道選擇題
- 藥劑科學(xué)習(xí)培訓(xùn)制度
- 阜寧縣中考題目及答案
- 臨考沖刺作文題目及答案
- 養(yǎng)老院老人心理輔導(dǎo)支持制度
- 高三電磁感應(yīng)題目及答案
- 養(yǎng)老院老人康復(fù)設(shè)施維修人員表彰制度
- 養(yǎng)老院老人健康監(jiān)測人員職業(yè)發(fā)展規(guī)劃制度
- 美團(tuán)酒店考試題目及答案
- 辦公室員工培訓(xùn)記錄與檔案制度
- 2025年國家能源局系統(tǒng)公務(wù)員面試模擬題及備考指南
- (2025年標(biāo)準(zhǔn))圈內(nèi)認(rèn)主協(xié)議書
- 2025年安徽省中考化學(xué)真題及答案
- 2025年軍隊(duì)文職人員統(tǒng)一招聘面試( 臨床醫(yī)學(xué))題庫附答案
- 海馬體核磁掃描課件
- 某電力股份企業(yè)同熱三期2×100萬千瓦項(xiàng)目環(huán)評報(bào)告書
- 2026屆上海市部分區(qū)中考一模語文試題含解析
- 中科大人類生態(tài)學(xué)課件2.0 地球·環(huán)境與人
- 數(shù)學(xué) 2024-2025學(xué)年人教版七年級數(shù)學(xué)下冊期末+試卷
- 高中英語必背3500單詞表完整版
- 急診成人社區(qū)獲得性肺炎臨床實(shí)踐指南(2024 年版)解讀
評論
0/150
提交評論