欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

python使用SimpleXMLRPCServer實(shí)現(xiàn)簡(jiǎn)單的rpc過(guò)程

 更新時(shí)間:2022年06月18日 09:32:57   作者:comprel  
這篇文章主要介紹了python使用SimpleXMLRPCServer實(shí)現(xiàn)簡(jiǎn)單的rpc過(guò)程,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教

使用SimpleXMLRPCServer實(shí)現(xiàn)rpc

模塊

  • SimpleXMLRPCServer

python標(biāo)準(zhǔn)庫(kù)中自帶的模塊,無(wú)需另外安裝

在python3中 SimpleXMLRPCServer已經(jīng)被合并到xmlrpc.server

定義

class SimpleXMLRPCServer.SimpleXMLRPCServer(addr[, requestHandler[, logRequests[, allow_none[, encoding[, bind_and_activate]]]])

方法

1.SimpleXMLRPCServer.register_function(function[, name])

  • 注冊(cè)一個(gè)方法,服務(wù)

2.SimpleXMLRPCServer.register_instance(instance[, allow_dotted_names])

  • 注冊(cè)實(shí)例
  • 一個(gè)對(duì)象在register_function注冊(cè)后則,不能再在register_instance注冊(cè)

3.SimpleXMLRPCServer.register_introspection_functions()

  • 注冊(cè)一個(gè)反函數(shù)

4.SimpleXMLRPCServer.register_multicall_functions()

  • 注冊(cè)復(fù)合函數(shù)

例如:

服務(wù)端

from SimpleXMLRPCServer import SimpleXMLRPCServer ??
def respon_string(str):
? ? return "get string :%s"%str

if __name__ == '__main__':
? ? s = SimpleXMLRPCServer(('0.0.0.0', 8080))
? ? s.register_function(respon_string,"get_string")
? ? s.serve_forever()

客服端

from xmlrpclib import ServerProxy
if __name__ == '__main__':
? ? s = ServerProxy("http://192.168.137.9:8080")
? ? print s.get_string("hello")?

結(jié)果:

# python get.py 
get string :hello

服務(wù)端:

#coding=utf8
from SimpleXMLRPCServer import SimpleXMLRPCServer
from SimpleXMLRPCServer import SimpleXMLRPCRequestHandler

class RequestHandler(SimpleXMLRPCRequestHandler):
? ? rpc_paths = ('/RPC2',)
server = SimpleXMLRPCServer(("0.0.0.0", 8000),
? ? ? ? ? ? ? ? ? ? ? ? ? ? requestHandler=RequestHandler)

print "start service on 0.0.0.0:8000" ? ? ? ? ? ? ? ? ? ? ? ? ? ?
server.register_introspection_functions()

#注冊(cè)pow,冪運(yùn)算,實(shí)際調(diào)用的是已有的算數(shù)pow()
server.register_function(pow)

def add(x,y):
? ? return x + y
server.register_function(add, 'add')

#注方法在xml-rpc中都是public的

class fun:
? ? def div(self, x, y):
? ? ? ? return x // y

server.register_instance(fun())
server.serve_forever()

客服端:

可以使用下面的方法調(diào)用:

import xmlrpclib

s = xmlrpclib.ServerProxy('http://192.168.137.9:8000')
print s.pow(3,5)?
print s.add(3,9)?
print s.div(7,3)?

print s.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è)方法注冊(cè)到一個(gè)調(diào)用里

#coding=utf8

from SimpleXMLRPCServer import SimpleXMLRPCServer

server = SimpleXMLRPCServer(("0.0.0.0", 8000))
server.register_function(pow)
server.register_function(lambda x,y: x+y, 'add')
server.register_multicall_functions()
server.serve_forever()

MultiCall調(diào)用復(fù)合方法

import xmlrpclib
s = xmlrpclib.ServerProxy("http://192.168.137.9:8000")
print s
multi = xmlrpclib.MultiCall(s)
multi.pow(2, 5)
try:
? ? for response in multi():
? ? ? ? print response
except Error, err:
? ? print "ERROR", err ??

結(jié)果:

# python jm.py 
<ServerProxy for 192.168.137.9:8000/RPC2>
32

python與rpc服務(wù)

RPC

1.什么是RPC

RPC 就是為解決服務(wù)之間信息交互而發(fā)明和存在的。

RPC(Remote Procedure Call)——遠(yuǎn)程過(guò)程調(diào)用,它是一種通過(guò)網(wǎng)絡(luò)從遠(yuǎn)程計(jì)算機(jī)程序上請(qǐng)求服務(wù),而不需要了解底層網(wǎng)絡(luò)技術(shù)的協(xié)議。

RPC采用客戶機(jī)/服務(wù)器模式。請(qǐng)求程序就是一個(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ù)接口的方式,說(shuō)白了,就是一種遠(yuǎn)程調(diào)用函數(shù)接口的方式,客戶端和服務(wù)端之間約定一種契約(函數(shù)接口),然后服務(wù)端一直等待客戶端的調(diào)用。

有點(diǎn)像平常的WEB網(wǎng)絡(luò)請(qǐng)求。

一種用途是在多臺(tái)服務(wù)器之間互相進(jìn)行調(diào)用。

另一個(gè)用途則在于,不同編程語(yǔ)言之間都支持這種方式,像Python更是內(nèi)置對(duì)其的支持,不需要額外安裝什么庫(kù),所以可以直接在多語(yǔ)言的服務(wù)器之間互相進(jìn)行調(diào)用。

Socket編程就是RPC通信

2.xmlrp庫(kù)

簡(jiǎn)單的服務(wù)端

像web請(qǐng)求一樣,我們需要確定供客戶端訪問(wèn)的url和端口號(hào),以及供客戶端調(diào)用的方法實(shí)現(xiàn),最后要讓我們服務(wù)器一直處于等待被訪問(wèn)的狀態(tài):

rpc_server.py
from xmlrpc.server import SimpleXMLRPCServer

調(diào)用函數(shù)

def respon_string(str):
return “get string:%s”%str

if name == ‘main':
server = SimpleXMLRPCServer((‘localhost', 8888)) # 初始化
server.register_function(respon_string, “get_string”) # 注冊(cè)get_string函數(shù)
print (“Listening for Client”)
server.serve_forever() # 保持等待調(diào)用狀態(tài)
rpc_client.py
from xmlrpc.client import ServerProxy

if name == ‘main':
server = ServerProxy(“http://localhost:8888”) # 初始化服務(wù)器
print (server.get_string(“RPC RPC”)) # 調(diào)用get_string函數(shù)并傳參,調(diào)用get_string讓服務(wù)端通過(guò)respon_string函數(shù)處理請(qǐng)求,并返回。

操作

#服務(wù)端啟動(dòng):
[root@xujunk tmp]#python3 rpc_server.py
Listening for Client
#客戶端啟動(dòng):
[root@xujunk tmp]#python3 rpc_client.py
get string:RPC RPC #返回結(jié)果

以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • python不到50行代碼完成了多張excel合并的實(shí)現(xiàn)示例

    python不到50行代碼完成了多張excel合并的實(shí)現(xiàn)示例

    這篇文章主要介紹了python不到50行代碼完成了多張excel合并的實(shí)現(xiàn)示例,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2020-05-05
  • Python統(tǒng)計(jì)字符內(nèi)容的占比的實(shí)現(xiàn)

    Python統(tǒng)計(jì)字符內(nèi)容的占比的實(shí)現(xiàn)

    本文介紹了如何使用Python統(tǒng)計(jì)字符占比,包括字符串中字母、數(shù)字、空格等字符的占比,對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2023-08-08
  • Python自動(dòng)化實(shí)現(xiàn)抖音自動(dòng)刷視頻

    Python自動(dòng)化實(shí)現(xiàn)抖音自動(dòng)刷視頻

    本文主要介紹了Python自動(dòng)化實(shí)現(xiàn)抖音自動(dòng)刷視頻,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2023-03-03
  • 利用python模擬實(shí)現(xiàn)POST請(qǐng)求提交圖片的方法

    利用python模擬實(shí)現(xiàn)POST請(qǐng)求提交圖片的方法

    最近在利用python做接口測(cè)試,其中有個(gè)上傳圖片的接口,在網(wǎng)上各種搜索,各種嘗試。下面這篇文章主要給大家介紹了關(guān)于利用python模擬實(shí)現(xiàn)POST請(qǐng)求提交圖片的相關(guān)資料,需要的朋友可以參考借鑒,下面來(lái)一起看看吧。
    2017-07-07
  • YOLOv5部署到web端詳細(xì)過(guò)程(flask+js簡(jiǎn)單易懂)

    YOLOv5部署到web端詳細(xì)過(guò)程(flask+js簡(jiǎn)單易懂)

    YOLOv5是一個(gè)目標(biāo)檢測(cè)模型,Flask是一個(gè)Python的Web框架,下面這篇文章主要給大家介紹了關(guān)于YOLOv5部署到web端(flask+js簡(jiǎn)單易懂)的相關(guān)資料,文中通過(guò)實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2023-04-04
  • 用Python進(jìn)行簡(jiǎn)單圖像識(shí)別(驗(yàn)證碼)

    用Python進(jìn)行簡(jiǎn)單圖像識(shí)別(驗(yàn)證碼)

    這篇文章主要為大家詳細(xì)介紹了用Python進(jìn)行簡(jiǎn)單圖像識(shí)別驗(yàn)證碼,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2018-01-01
  • Python中調(diào)用其他程序的方式詳解

    Python中調(diào)用其他程序的方式詳解

    這篇文章主要介紹了Python中調(diào)用其他程序的方式詳解,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2019-08-08
  • python中pd.Series()函數(shù)的使用

    python中pd.Series()函數(shù)的使用

    本文主要介紹了python中pd.Series()函數(shù)的使用,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2023-05-05
  • 如何使用Python實(shí)現(xiàn)斐波那契數(shù)列

    如何使用Python實(shí)現(xiàn)斐波那契數(shù)列

    這篇文章主要介紹了如何使用Python實(shí)現(xiàn)斐波那契數(shù)列,斐波那契數(shù)列(Fibonacci)最早由印度數(shù)學(xué)家Gopala提出,而第一個(gè)真正研究斐波那契數(shù)列的是意大利數(shù)學(xué)家 Leonardo Fibonacci,需要的朋友可以參考下
    2019-07-07
  • tensorflow 分類損失函數(shù)使用小記

    tensorflow 分類損失函數(shù)使用小記

    這篇文章主要介紹了tensorflow 分類損失函數(shù)使用小記,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2020-02-02

最新評(píng)論