最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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

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

使用SimpleXMLRPCServer實現(xiàn)rpc

模塊

  • SimpleXMLRPCServer

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

在python3中 SimpleXMLRPCServer已經(jīng)被合并到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,冪運算,實際調(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()

結果:

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

register_multicall_functions實現(xiàn)復合調(diào)用,多個方法注冊到一個調(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)用復合方法

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)——遠程過程調(diào)用,它是一種通過網(wǎng)絡從遠程計算機程序上請求服務,而不需要了解底層網(wǎng)絡技術的協(xié)議。

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

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

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

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

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

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

有點像平常的WEB網(wǎng)絡請求。

一種用途是在多臺服務器之間互相進行調(diào)用。

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

Socket編程就是RPC通信

2.xmlrp庫

簡單的服務端

像web請求一樣,我們需要確定供客戶端訪問的url和端口號,以及供客戶端調(diào)用的方法實現(xià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”) # 注冊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”) # 初始化服務器
print (server.get_string(“RPC RPC”)) # 調(diào)用get_string函數(shù)并傳參,調(diào)用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 #返回結果

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

相關文章

  • Django框架表單操作實例分析

    Django框架表單操作實例分析

    這篇文章主要介紹了Django框架表單操作,結合實例形式分析了Django框架表單數(shù)據(jù)發(fā)送、請求相關操作技巧與注意事項,需要的朋友可以參考下
    2019-11-11
  • Python使用urllib2模塊抓取HTML頁面資源的實例分享

    Python使用urllib2模塊抓取HTML頁面資源的實例分享

    這篇文章主要介紹了Python使用urllib2模塊抓取HTML頁面資源的實例分享,將要抓取的頁面地址寫在單獨的規(guī)則列表中方便組織和重復使用,需要的朋友可以參考下
    2016-05-05
  • Python中文豎排顯示的方法

    Python中文豎排顯示的方法

    這篇文章主要介紹了Python中文豎排顯示的方法,可實現(xiàn)Python將中文豎排輸出顯示的功能,具有一定參考借鑒價值,需要的朋友可以參考下
    2015-07-07
  • 詳解pygame中Rect對象

    詳解pygame中Rect對象

    Rect是pygame中的一個創(chuàng)建矩形的對象,它包含一些屬性主要是兩塊:坐標和長寬,Pygame?通過?Rect?對象存儲和操作矩形區(qū)域,這篇文章主要介紹了pygame中Rect對象,需要的朋友可以參考下
    2022-07-07
  • 利用Python破解驗證碼實例詳解

    利用Python破解驗證碼實例詳解

    這篇文章主要給大家介紹的是如何通過一個簡單的例子來實現(xiàn)破解驗證碼。從本文中我們可以學習到 Python 基本知識,PIL 模塊的使用,破解驗證碼的原理。文中通過實例一步步介紹的很詳細,相信對大家理解和學習具有一定的參考借鑒價值,有需要的朋友們下面來一起看看吧。
    2016-12-12
  • 簡單理解Python中的裝飾器

    簡單理解Python中的裝飾器

    這篇文章主要介紹了Python中的裝飾器,是Python入門學習中的基礎知識,需要的朋友可以參考下
    2015-07-07
  • python爬取B站關注列表及數(shù)據(jù)庫的設計與操作

    python爬取B站關注列表及數(shù)據(jù)庫的設計與操作

    這篇文章主要為大家介紹了python爬取B站關注列表及數(shù)據(jù)庫的設計與操作,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2022-05-05
  • Python實現(xiàn)屏幕截圖的兩種方式

    Python實現(xiàn)屏幕截圖的兩種方式

    這篇文章主要介紹了Python實現(xiàn)屏幕截圖的兩種方式及對這兩者的特點和用法進行詳細解釋,感興趣的朋友一起看看
    2018-02-02
  • 基于scrapy實現(xiàn)的簡單蜘蛛采集程序

    基于scrapy實現(xiàn)的簡單蜘蛛采集程序

    這篇文章主要介紹了基于scrapy實現(xiàn)的簡單蜘蛛采集程序,實例分析了scrapy實現(xiàn)采集程序的技巧,具有一定參考借鑒價值,需要的朋友可以參考下
    2015-04-04
  • 詳解Python如何生成詞云的方法

    詳解Python如何生成詞云的方法

    這篇文章主要介紹了詳解Python如何生成詞云的方法,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2018-06-06

最新評論

泉州市| 都匀市| 潮安县| 山西省| 乐都县| 晋城| 昌都县| 弥渡县| 鸡东县| 砚山县| 岳西县| 盖州市| 湟源县| 宜章县| 平塘县| 象山县| 天峻县| 通化市| 贵港市| 玉环县| 太白县| 锡林浩特市| 钟山县| 东丰县| 来宾市| 湘乡市| 集安市| 方正县| 宜兴市| 松江区| 灵璧县| 三门县| 波密县| 大港区| 马尔康县| 盱眙县| 水富县| 息烽县| 琼结县| 卢湾区| 阜康市|