python使用XML-RPC實(shí)現(xiàn)簡單遠(yuǎn)端過程調(diào)用

今天我們來實(shí)現(xiàn)一個簡單的rpc調(diào)用绑雄,首先是一個簡單的例子:

from xmlrpc.server import SimpleXMLRPCserver

class KeyValueServer:
    _rpc_methods_ = ['get', 'set', 'delete', 'exits', 'keys']
    
    def __init__(self, address):
        self._data = []
        self._serv = SimpleXMLPRCServer(address, allow_none=True)
        for name in self._rpc_methods_:
            self._serv.regist_function(getattr(self, name))
            
    def get(self, name):
        return self._data[name]
        
    def set(self, name, value):
        self._data[name] = value
        
    def delete(self, name):
        self._data[name]
    
    def exits(self, name):
        return name in self._data
        
    def keys(self):
        return list(self._data)
        
    def serve_forever(self):
        self._serv.serve_forever()
        
if "__name__" == "__main__":
    kvserv = KeyValueServer(('', 15000))
    kvserv.serve_forever()

這里的這個簡單例子是建立一個rpc的服務(wù)端烦绳,關(guān)鍵點(diǎn)主要有以下幾點(diǎn):

  • rpc_methods為自己定義的方法集窄驹,可以在里面添加我們需要自定義的方法。
  • 實(shí)例化服務(wù)端之后翎蹈,切記把我們自己定義的方法注冊到服務(wù)端,這里的注冊使用循環(huán)獲取自己的屬性來實(shí)現(xiàn),不清楚getattr的同學(xué)可以自己學(xué)習(xí)一下這個常用的方法。
  • 最后就是啟動服務(wù)serve_forever()方法懂昂。

寫完了服務(wù)端的代碼,那么我們繼續(xù)來編寫客戶端的代碼没宾,看一下客戶端如何調(diào)用服務(wù)器的代碼:

from xmlrpc.client import ServerProxy

s = ServerProxy('http://localhost:15000', allow_none=True)
s.set('foo', 'bar')
s.set('spam', [1,2,3])

就這么簡單的代碼可以創(chuàng)建一個端的代理凌彬,在這個代理的實(shí)例上面可以進(jìn)行屬性設(shè)置,其實(shí)已經(jīng)通過內(nèi)部實(shí)現(xiàn)進(jìn)行遠(yuǎn)程調(diào)用了循衰,從我們的視角看來就行是在本地端調(diào)用一樣铲敛。
我們可以這樣進(jìn)行調(diào)用:

>>>s.keys()
['foo', 'spam']

還可以使用get, 等一些列自定義方法。

再來分析一下我們的這個遠(yuǎn)程調(diào)用代碼会钝,這個調(diào)用的瓶頸在于性能伐蒋,因?yàn)榉?wù)器端是已單線程實(shí)現(xiàn)的,也許你會說我可以已多線程的方式運(yùn)行迁酸,但是這個RPC會將所有的數(shù)據(jù)進(jìn)行XML化先鱼,所以稍微慢一點(diǎn),如果從實(shí)用性的角度來看的話奸鬓,你需要馬上有一個并且可以不完善的遠(yuǎn)程調(diào)用時焙畔,這是個不錯的選擇。

下一節(jié)我們來看如何實(shí)現(xiàn)遠(yuǎn)端調(diào)用的過程串远。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末宏多,一起剝皮案震驚了整個濱河市儿惫,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌绷落,老刑警劉巖姥闪,帶你破解...
    沈念sama閱讀 219,589評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異砌烁,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)催式,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,615評論 3 396
  • 文/潘曉璐 我一進(jìn)店門函喉,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人荣月,你說我怎么就攤上這事管呵。” “怎么了哺窄?”我有些...
    開封第一講書人閱讀 165,933評論 0 356
  • 文/不壞的土叔 我叫張陵捐下,是天一觀的道長。 經(jīng)常有香客問我萌业,道長坷襟,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,976評論 1 295
  • 正文 為了忘掉前任生年,我火速辦了婚禮婴程,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘抱婉。我一直安慰自己档叔,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,999評論 6 393
  • 文/花漫 我一把揭開白布蒸绩。 她就那樣靜靜地躺著衙四,像睡著了一般。 火紅的嫁衣襯著肌膚如雪患亿。 梳的紋絲不亂的頭發(fā)上传蹈,一...
    開封第一講書人閱讀 51,775評論 1 307
  • 那天,我揣著相機(jī)與錄音窍育,去河邊找鬼卡睦。 笑死,一個胖子當(dāng)著我的面吹牛漱抓,可吹牛的內(nèi)容都是我干的表锻。 我是一名探鬼主播,決...
    沈念sama閱讀 40,474評論 3 420
  • 文/蒼蘭香墨 我猛地睜開眼乞娄,長吁一口氣:“原來是場噩夢啊……” “哼瞬逊!你這毒婦竟也來了显歧?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,359評論 0 276
  • 序言:老撾萬榮一對情侶失蹤确镊,失蹤者是張志新(化名)和其女友劉穎士骤,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體蕾域,經(jīng)...
    沈念sama閱讀 45,854評論 1 317
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡拷肌,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,007評論 3 338
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了旨巷。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片巨缘。...
    茶點(diǎn)故事閱讀 40,146評論 1 351
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖采呐,靈堂內(nèi)的尸體忽然破棺而出若锁,到底是詐尸還是另有隱情,我是刑警寧澤斧吐,帶...
    沈念sama閱讀 35,826評論 5 346
  • 正文 年R本政府宣布又固,位于F島的核電站,受9級特大地震影響煤率,放射性物質(zhì)發(fā)生泄漏仰冠。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,484評論 3 331
  • 文/蒙蒙 一涕侈、第九天 我趴在偏房一處隱蔽的房頂上張望沪停。 院中可真熱鬧,春花似錦裳涛、人聲如沸木张。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,029評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽舷礼。三九已至,卻和暖如春郊闯,著一層夾襖步出監(jiān)牢的瞬間妻献,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,153評論 1 272
  • 我被黑心中介騙來泰國打工团赁, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留育拨,地道東北人。 一個月前我還...
    沈念sama閱讀 48,420評論 3 373
  • 正文 我出身青樓欢摄,卻偏偏與公主長得像熬丧,于是被迫代替她去往敵國和親怀挠。 傳聞我的和親對象是個殘疾皇子析蝴,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,107評論 2 356

推薦閱讀更多精彩內(nèi)容