ホームページ > バックエンド開発 > Python チュートリアル > Python でのリモート呼び出し (RPC、RMI) の簡単な例

Python でのリモート呼び出し (RPC、RMI) の簡単な例

WBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWB
リリース: 2016-06-16 08:44:19
オリジナル
1397 人が閲覧しました

リモート呼び出しでは、リモート サーバーのオブジェクトとメソッドの呼び出しは、ローカル オブジェクトとメソッドの呼び出しと同様になります。これは、ネットワーク プログラミングによってこれらを隠すためです。リモート通話は分散システムの基礎です。

リモート呼び出しは一般に、リモート プロシージャ コール (RPC) とリモート メソッド呼び出し (RMI) の 2 つのタイプに分類されます。

RPC

RPC は関数レベルのリモート呼び出しであり、主に HTTP 経由でデータを送信します。データ形式には XML、JSON、シリアル化されたデータなどが含まれます。ここではPythonを使ってxml-rpcの例を作成します。 まずサーバー側のserver.pyを指定します:

コードをコピーします コードは次のとおりです:

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 は、ローカル 8080 ポートにバインドされたサーバー オブジェクトです。 register_function() メソッドは、関数 add を s に登録します。 serve_forever() はサーバーを起動します。 別のクライアントに client.py を与えます:

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


ここで、server.py を実行してから client.py を実行すると、client.py があるコンソールには 7 が出力されます。

Wireshark を使用して、この期間中に渡されたデータがどのようなものであるかを確認します。 要求されたデータ:

コードをコピーします コードは次のとおりです。 🎜>
<?xml version = '1.0'?>
< methodcall>
🎜>🎜></params>
</methodcall> 応答データ:



コードをコピー

コードは次のとおりです:


< MethodResponse>
;/int>/value>

RMI

RMIとはリモートメソッド呼び出しのことであり、基本単位がオブジェクトであるためRPCより粒度が大きいです。一般的な考え方は次のとおりです。 RMI サーバー オブジェクトを作成し、指定されたサービス名でインスタンス化されたオブジェクト (複数のオブジェクトでも構いませんが、サービス名は同じであってはなりません) を RMI サーバー オブジェクトに登録し、RMI を開始します。サーバー。サーバーはクライアントから送信されるデータ(サービス名、関数名、パラメータなど)を待ち、処理結果をクライアントに返します。 Pyro4 は Python に基づいた RMI 実装です。以下では Pyro4 を使用して RMI サーバーを作成します。
コードをコピーします。 コードは次のとおりです。以下:

import Pyro4
class GreetingMaker(object):
def get_fortune(self, name):
return "Hello, {0}.n" .format(name)
greeting_maker =GreetingMaker()
daemon=Pyro4.Daemon() _ 変数は、Pyro4 によって生成されたgreeting_の URI です。独自のメソッドを使用する Maker オブジェクト。これにはソケットと、greeting_maker 用に生成された一意の ID が含まれます。この ID はサービス名に相当します。もちろん、よりわかりやすいサービス名を指定することもできます。以下はクライアント client2.py です:

import Pyro4
uri=raw_input(" Pyro uri : ").strip()
name=raw_input("あなたの名前: ").strip()greeting_maker=Pyro4.Proxy(uri)

printgreeting_maker.get_fortune(name)

入力する URI は、server2.py によって生成された URI です。 Pyro4.Proxy にgreeting_makerのuriを渡すことで、サーバー側でgreeting_makerとの接続が確立されたとみなして、greeting_makerのget_fortune()メソッドを呼び出すことができます。 name が letian の場合、printgreeting_maker.get_fortune(name) の結果は Hello, letian..

関連ラベル:
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
最新の問題
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート