溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

python怎么使用SimpleXMLRPCServer實現(xiàn)簡單的rpc過程

發(fā)布時間:2022-06-18 13:55:44 來源:億速云 閱讀:132 作者:iii 欄目:開發(fā)技術

這篇文章主要介紹了python怎么使用SimpleXMLRPCServer實現(xiàn)簡單的rpc過程的相關知識,內容詳細易懂,操作簡單快捷,具有一定借鑒價值,相信大家閱讀完這篇python怎么使用SimpleXMLRPCServer實現(xiàn)簡單的rpc過程文章都會有所收獲,下面我們一起來看看吧。

使用SimpleXMLRPCServer實現(xiàn)rpc

模塊

  • SimpleXMLRPCServer

python標準庫中自帶的模塊,無需另外安裝

在python3中 SimpleXMLRPCServer已經被合并到xmlrpc.server

定義

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

方法

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

  • 注冊一個方法,服務

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

  • 注冊實例

  • 一個對象在register_function注冊后則,不能再在register_instance注冊

3.SimpleXMLRPCServer.register_introspection_functions()

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

4.SimpleXMLRPCServer.register_multicall_functions()

  • 注冊復合函數(shù)

例如:

服務端

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")

結果:

# python get.py 
get string :hello

服務端:

#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()

#注冊pow,冪運算,實際調用的是已有的算數(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()

客服端:

可以使用下面的方法調用:

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()

結果:

243
12
2
['add', 'div', 'pow', 'system.listMethods', 'system.methodHelp', 'system.methodSignature']

register_multicall_functions實現(xiàn)復合調用,多個方法注冊到一個調用里

#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調用復合方法

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

結果:

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

python與rpc服務

RPC

1.什么是RPC

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

RPC(Remote Procedure Call)&mdash;&mdash;遠程過程調用,它是一種通過網絡從遠程計算機程序上請求服務,而不需要了解底層網絡技術的協(xié)議。

RPC采用客戶機/服務器模式。請求程序就是一個客戶機,而服務提供程序就是一個服務器。

首先,客戶機調用進程發(fā)送一個有進程參數(shù)的調用信息到服務進程,然后等待應答信息。

在服務器端,進程保持睡眠狀態(tài)直到調用信息到達為止。

當一個調用信息到達,服務器獲得進程參數(shù),計算結果,發(fā)送答復信息

然后等待下一個調用信息,最后,客戶端調用進程接收答復信息,獲得進程結果,然后調用執(zhí)行繼續(xù)進行。

RPC就是一種遠程調用函數(shù)接口的方式,說白了,就是一種遠程調用函數(shù)接口的方式,客戶端和服務端之間約定一種契約(函數(shù)接口),然后服務端一直等待客戶端的調用。

有點像平常的WEB網絡請求。

一種用途是在多臺服務器之間互相進行調用。

另一個用途則在于,不同編程語言之間都支持這種方式,像Python更是內置對其的支持,不需要額外安裝什么庫,所以可以直接在多語言的服務器之間互相進行調用。

Socket編程就是RPC通信

2.xmlrp庫

簡單的服務端

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

rpc_server.py
from xmlrpc.server import SimpleXMLRPCServer

調用函數(shù)

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

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

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

操作

#服務端啟動:
[root@xujunk tmp]#python3 rpc_server.py
Listening for Client
#客戶端啟動:
[root@xujunk tmp]#python3 rpc_client.py
get string:RPC RPC #返回結果

關于“python怎么使用SimpleXMLRPCServer實現(xiàn)簡單的rpc過程”這篇文章的內容就介紹到這里,感謝各位的閱讀!相信大家對“python怎么使用SimpleXMLRPCServer實現(xiàn)簡單的rpc過程”知識都有一定的了解,大家如果還想學習更多知識,歡迎關注億速云行業(yè)資訊頻道。

向AI問一下細節(jié)

免責聲明:本站發(fā)布的內容(圖片、視頻和文字)以原創(chuàng)、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關證據(jù),一經查實,將立刻刪除涉嫌侵權內容。

AI