Python中關於XML RPC原理

2021-09-30 13:54:12 字數 3885 閱讀 2962

**

******xmlrpcserver模組為xml-rpc服務端的寫入提供了乙個基本的框架。利用******xmlrpcserver伺服器既可以一直空閒,也可以利用cgixmlrpcrequesthandler來嵌入到乙個cgi環境中。

xml-rpc(remote procedure call)是通過http傳輸協議,利用xml格式的遠端程式呼叫方法。客戶端可以呼叫服務端帶引數的方法並獲取返回的結構資料。(服務端的名字是乙個uri)。這個模組支援寫入xml-rpc端的**。它用來處理所有轉換的細節在在整合的python物件和xml報文之間。

eg1服務端**:

from ******xmlrpcserver import ******xmlrpcserver

from ******xmlrpcserver import ******xmlrpcrequesthandler

class

requesthandler

(******xmlrpcrequesthandler):

rpc_paths = ('/rpc2')

server = ******xmlrpcserver(("localhost", 8000),requesthandler = requesthandler)

#server = ******xmlrpcserver(("localhost", 8000))

server.register_introspection_functions()

server.register_function(pow)

defadder_function

(x,y):

return x+y

server.register_function(adder_function,'add')

class

myfuncs:

defdiv

(self, x, y):

return x//y

server.register_instance(myfuncs())

server.serve_forever()

eg1客戶端**:

print s.system.listmethods()xml_rpc服務端建立步驟:

1、 匯入******xmlrpcserver模組

2、 例項化乙個xml-rpc服務物件,在指定的埠監聽請求

server = ******xmlrpcserver((「localhost」, 8000))

3、 對函式的定義並把該函式註冊到server端

server.register_function(adder_function,』add』)##adder_function是服務點定義的函式,add是客戶端呼叫時用的函式。

server.register_introspection_functions()##如果用到內部函式,需要把內部函式註冊到服務端。

server.register_instance(myfuncs())##如果要註冊的是乙個類,可以利用這個函式把類中的方法全部註冊到server端。

4、服務端開始監聽執行server.serve_forever()

xml_rpc客戶端建立步驟:

1、 匯入xmlrpclib庫模組

2、 建立乙個**到服務端

proxy = xmlrpclib.serverproxy(『http://localhost:8000『)##函式引數是url格式

3、通過**就可以呼叫服務端的方法。

eg2服務端**:

import datetime

from ******xmlrpcserver import ******xmlrpcserver

import xmlrpclib

deftoday

(): today = datetime.datetime.today()

return xmlrpclib.datetime(today)

defadd

(x,y):

return x+y

defsubtract

(x,y):

return x-y

defmultiply

(x,y):

return x*y

defdivide

(x,y):

return x/y

server = ******xmlrpcserver(("localhost", 8001))

print

"listening on port 8001..."

server.register_multicall_functions()

server.register_function(today, "today")

server.register_function(add, "add")

server.register_function(subtract, "subtract")

server.register_function(multiply, "multiply")

server.register_function(divide, "divide")

server.serve_forever()

注意:

server.register_multicall_functions()##這個函式的作用是可以使客戶端同時呼叫服務端的的多個函式。

eg2客戶端**:

"today1: %s, 7+3=%d, 7-3=%d, 7*3=%d, 7/3=%d" % tuple(result)注意:

multicall = xmlrpclib.multicall(proxy)

…… result = multicall()##將這兩個函式之間的返回值寫入到result中。

Python的招牌菜xmlrpc

一 簡介 為了解決在系統的80埠提供rpc的服務,而又不影響正在執行的web服務,人們想出了用http協議傳輸rpc包的辦法。對於幾乎是專門用於傳輸文字的http協議,要在其上傳輸rpc封包,最方便的方法莫過於把rpc封包編碼成文字形式 例如xml檔案。xml rpc 是由美國userland公司指...

Python的招牌菜xmlrpc

一 簡單介紹 為了解決在系統的80port提供rpc的服務。而又不影響正在執行的web服務。人們想出了用http協議傳輸rpc包的辦法。對於差點兒是專門用於傳輸文字的http協議。要在其上傳輸rpc封包。最方便的方法莫過於把rpc封包編碼成文字形式 比如xml檔案。xml rpc 是由美國userl...

php5中XML RPC函式的使用

這幾天在看了zend php5 code contest的比賽獲獎作品,看了幾個的關於web架構方面的獲獎作品,感受頗深,xml和php結合應用越來多了,裡面幾乎所有的作品在設計上都用到了xml這個東西.又落伍了不少.建議朋友們都去看看.所以自己這幾天在瘋狂的學習php和xml結合的相關知識.這其中...