python xmlrpc入門


 

轉:https://www.cnblogs.com/lxt287994374/p/3904219.html

一、簡介

  RPC是Remote Procedure Call的縮寫,翻譯成中文為:遠程方法調用。

它是一種在本地機器上調用遠端機器上的一個過程(方法)的技術,這個過程也被大家稱為“分布式計算”,是為了提高各個分立機器的“互操作性”而發明出來的技術。

  XML-RPC的全稱是XML Remote Procedure Call,即XML遠程方法調用。

它是一套允許運行在不同操作系統、不同環境的程序實現基於Internet過程調用的規范和一系列的實現。這種遠程過程調用使用http作為傳輸協議,XML作為傳送信息的編碼格式。Xml-Rpc的定義盡可能的保持了簡單,但同時能夠傳送、處理、返回復雜的數據結構。XML- RPC(http://www.xmlrpc.com)是由美國UserLand公司指定的一個RPC協議。簡單的理解是:將數據定義為xml格式,通過http協議進行遠程傳輸。

 

二、優點

1. 傳輸復雜的數據。

2. 通過程序語言的封裝,實現遠程對象的調用。


三、Python下的XML-RPC

1. 類庫:SimpleXMLRPCServer

  一般使用在服務器端,這個模塊用來構造一個最基本的XML-RPC服務器框架。

2. 類庫:xmlrpclib

  一般使用在客戶端,這個模塊用來調用注冊在XML-RPC服務器端的函數,xmlrpclib並不是一個類型安全的模塊,無法抵御惡意構造的數據,這方面的一些處理工作需要交給開發者自己。

 

大致用法:使用SimpleXMLRPCServer模塊運行XMLRPC服務器,在其中注冊服務器提供的函數或者對象;然后在客戶端內使用xmlrpclib.ServerProxy連接到服務器,想要調用服務器的函數,直接調用ServerProxy即可。

 

簡單實例:hello xmlprc

服務器端:xmlrpc_server.py

復制代碼
import SimpleXMLRPCServer

class MyObject:
    def sayHello(self):
        return "hello xmlprc"

obj = MyObject()
server = SimpleXMLRPCServer.SimpleXMLRPCServer(("localhost", 8088))
server.register_instance(obj)

print "Listening on port 8088"
server.serve_forever()
復制代碼

 

客戶端:xmlrpc_client.py

復制代碼
import xmlrpclib

server = xmlrpclib.ServerProxy("http://localhost:8088")

words = server.sayHello()

print "result:" + words
復制代碼

 

  打開一個終端,輸入命令,運行服務器端程序:

chmod u+x xmlrpc_server.py
python xmlrpc_server.py

打開另一個新的終端,輸入命令,運行客戶端程序:
chmod u+x xmlrpc_client.py
python xmlrpc_client.py

可以看到客戶端控制台上輸出了:hello xmlprc。如圖:





附:
SimpleXMLRPCServer是一個單線程的服務器。這意味着,如果幾個客戶端同時發出多個請求,其它的請求就必須等待第一個請求完成以后才能繼續。
若修改服務器端如下:
復制代碼
from SimpleXMLRPCServer import SimpleXMLRPCServer
from SocketServer import ThreadingMixIn
class ThreadXMLRPCServer(ThreadingMixIn, SimpleXMLRPCServer):pass

class MyObject:
    def sayHello(self):
        return "hello xmlprc"

obj = MyObject()
server = ThreadXMLRPCServer(("localhost", 8088), allow_none=True)
server.register_instance(obj)

print "Listening on port 8088"
server.serve_forever()
復制代碼

 此時,服務器就支持多線程並發了。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM