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

Python中實(shí)現(xiàn)遠(yuǎn)程調(diào)用(RPC、RMI)簡(jiǎn)單例子

 更新時(shí)間:2014年04月28日 09:21:06   作者:  
說(shuō)白了,遠(yuǎn)程調(diào)用就是將對(duì)象名、函數(shù)名、參數(shù)等傳遞給遠(yuǎn)程服務(wù)器,服務(wù)器將處理結(jié)果返回給客戶(hù)端

遠(yuǎn)程調(diào)用使得調(diào)用遠(yuǎn)程服務(wù)器的對(duì)象、方法的方式就和調(diào)用本地對(duì)象、方法的方式差不多,因?yàn)槲覀兺ㄟ^(guò)網(wǎng)絡(luò)編程把這些都隱藏起來(lái)了。遠(yuǎn)程調(diào)用是分布式系統(tǒng)的基礎(chǔ)。

遠(yuǎn)程調(diào)用一般分為兩種,遠(yuǎn)程過(guò)程調(diào)用(RPC)和遠(yuǎn)程方法調(diào)用(RMI)。

RPC

RPC屬于函數(shù)級(jí)別的遠(yuǎn)程調(diào)用,其多是通過(guò)HTTP傳輸數(shù)據(jù),數(shù)據(jù)形式有XML、JSON、序列化數(shù)據(jù)等。在此,用python做一個(gè)xml-rpc的示例。 先給服務(wù)器端server.py:

復(fù)制代碼 代碼如下:

from SimpleXMLRPCServer import SimpleXMLRPCServer  
def add(x, y):
    return x + y   
if __name__ == '__main__':
    s = SimpleXMLRPCServer(('127.0.0.1', 8080))
    s.register_function(add)
    s.serve_forever()
s是一個(gè)綁定了本地8080端口的服務(wù)器對(duì)象,register_function()方法將函數(shù)add注冊(cè)到s中。serve_forever()啟動(dòng)服務(wù)器。 再給個(gè)客戶(hù)端client.py:

from xmlrpclib import ServerProxy
if __name__ == '__main__':
    s = ServerProxy("http://127.0.0.1:8080")
    print s.add(3,4)


現(xiàn)在,運(yùn)行server.py,然后運(yùn)行client.py,client.py所在的console會(huì)輸出7。

我們用wireshark看一下這期間傳遞的數(shù)據(jù)是什么樣子的,請(qǐng)求的數(shù)據(jù):

復(fù)制代碼 代碼如下:

<?xml version='1.0' ?>
<methodCall>
    <methodName>
        add
    </methodName>
    <params>
        <param>
            <value>
                <int> 3 </int>
                </value>
        </param>
        <param>
            <value>
                <int> 4 </int>
            </value>
        </param>
    </params>
</methodCall>

響應(yīng)的數(shù)據(jù):
復(fù)制代碼 代碼如下:

<?xml version='1.0' ?>
<methodResponse>
    <params>
        <param>
            <value>
                <int> 7 </int>
            </value>
        </param>
    </params>
</methodResponse>

好吧,言簡(jiǎn)意賅,不做贅述。

RMI

RMI意為遠(yuǎn)程方法調(diào)用,粒度比RPC要大,因?yàn)樗幕締挝皇菍?duì)象。其大致思路是這樣的:創(chuàng)建RMI服務(wù)器對(duì)象,將實(shí)例化的某個(gè)對(duì)象以指定的服務(wù)名稱(chēng)(也可以是多個(gè)對(duì)象,但是服務(wù)名稱(chēng)不應(yīng)相同)注冊(cè)到RMI服務(wù)器對(duì)象中,之后啟動(dòng)RMI服務(wù)器。服務(wù)器等待客戶(hù)端發(fā)送的數(shù)據(jù)(包括服務(wù)名稱(chēng)、函數(shù)名、參數(shù)),將處理結(jié)果返回給客戶(hù)端。 Pyro4是一個(gè)基于python的RMI實(shí)現(xiàn),下面我們用Pyro4創(chuàng)建一個(gè)RMI服務(wù)器,請(qǐng)看server2.py:

復(fù)制代碼 代碼如下:

import Pyro4
class GreetingMaker(object):
    def get_fortune(self, name):
        return "Hello, {0}. \n" .format(name)
greeting_maker=GreetingMaker()
daemon=Pyro4.Daemon()               
uri=daemon.register(greeting_maker)  
print "Ready. Object uri =", uri     
daemon.requestLoop()
uri變量是Pyro4用自己的方法為greeting_maker對(duì)象生成的uri,其中包括套接字以及為greeting_maker生成的唯一的id。這個(gè)id相當(dāng)于服務(wù)名稱(chēng),當(dāng)然也可以指定更易懂的服務(wù)名稱(chēng)。下面是客戶(hù)端client2.py:

import Pyro4
uri=raw_input(" Pyro uri : ").strip()
name=raw_input("Your name: ").strip()
greeting_maker=Pyro4.Proxy(uri)       
print greeting_maker.get_fortune(name)


這其中要輸入的uri也就是server2.py生成的uri。通過(guò)給Pyro4.Proxy傳遞greeting_maker的uri,可以認(rèn)為和服務(wù)器端的greeting_maker建立的連接,然后調(diào)用greeting_maker的get_fortune()方法。如果name是letian,那么print greeting_maker.get_fortune(name)的結(jié)果是Hello, letian.。

相關(guān)文章

  • 面向新手解析python Beautiful Soup基本用法

    面向新手解析python Beautiful Soup基本用法

    這篇文章主要介紹了面向新手解析python Beautiful Soup基本用法,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-07-07
  • Python3 socket即時(shí)通訊腳本實(shí)現(xiàn)代碼實(shí)例(threading多線(xiàn)程)

    Python3 socket即時(shí)通訊腳本實(shí)現(xiàn)代碼實(shí)例(threading多線(xiàn)程)

    這篇文章主要介紹了Python3 socket即時(shí)通訊腳本實(shí)現(xiàn)代碼實(shí)例(threading多線(xiàn)程),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-06-06
  • Opencv實(shí)現(xiàn)摳圖背景圖替換功能

    Opencv實(shí)現(xiàn)摳圖背景圖替換功能

    這篇文章主要為大家詳細(xì)介紹了Opencv實(shí)現(xiàn)摳圖替換背景圖,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2019-05-05
  • Windows環(huán)境下如何使用Pycharm運(yùn)行sh文件

    Windows環(huán)境下如何使用Pycharm運(yùn)行sh文件

    這篇文章主要介紹了Windows環(huán)境下如何使用Pycharm運(yùn)行sh文件,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2023-02-02
  • Python使用jsonpath-rw模塊處理Json對(duì)象操作示例

    Python使用jsonpath-rw模塊處理Json對(duì)象操作示例

    這篇文章主要介紹了Python使用jsonpath-rw模塊處理Json對(duì)象操作,結(jié)合實(shí)例形式分析了Python使用requests與response處理json的方法,并給出了jsonpath_rw模塊操作json對(duì)象的基本示例,需要的朋友可以參考下
    2018-07-07
  • Python中使用PDB庫(kù)調(diào)試程序

    Python中使用PDB庫(kù)調(diào)試程序

    這篇文章主要介紹了Python中使用PDB庫(kù)調(diào)試程序,本文講解了使用PDB的二種模式以及PDB模式下的常用調(diào)試命令,需要的朋友可以參考下
    2015-04-04
  • python 批量下載bilibili視頻的gui程序

    python 批量下載bilibili視頻的gui程序

    這篇文章主要介紹了python 批量下載bilibili視頻的gui程序,幫助大家更好的理解和使用python,感興趣的朋友可以了解下
    2020-11-11
  • 詳解Python 調(diào)用C# dll庫(kù)最簡(jiǎn)方法

    詳解Python 調(diào)用C# dll庫(kù)最簡(jiǎn)方法

    這篇文章主要介紹了詳解Python 調(diào)用C# dll庫(kù)最簡(jiǎn)方法,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2019-06-06
  • 粗略分析Python中的內(nèi)存泄漏

    粗略分析Python中的內(nèi)存泄漏

    這篇文章主要介紹了粗略分析Python中的內(nèi)存泄漏,分析了包括在垃圾回收時(shí)產(chǎn)生等的原因,需要的朋友可以參考下
    2015-04-04
  • 關(guān)于Keras Dense層整理

    關(guān)于Keras Dense層整理

    這篇文章主要介紹了關(guān)于Keras Dense層整理,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2020-05-05

最新評(píng)論

鄂尔多斯市| 阿勒泰市| 正镶白旗| 南京市| 军事| 大冶市| 建始县| 青神县| 揭东县| 卢龙县| 珠海市| 拜泉县| 隆林| 穆棱市| 峡江县| 邵阳县| 金平| 保靖县| 新巴尔虎左旗| 姚安县| 伽师县| 桃源县| 麦盖提县| 潼关县| 肥西县| 万源市| 惠东县| 丹棱县| 河源市| 南部县| 来凤县| 三亚市| 敦化市| 丰台区| 浦东新区| 西林县| 铅山县| 西乌珠穆沁旗| 自贡市| 宁城县| 宜阳县|