Python
 Computer >> コンピューター >  >> プログラミング >> Python

PythonでXML-RPCサーバーとクライアントを実装する方法

XML-RPCプロトコルを利用すると、クロスプラットフォームかつ言語に依存しない独自のサーバーを構築できます。PythonではSimpleXMLRPCServerクラスを使ってサーバーインスタンスを作成し、着信リクエストを待ち受けさせます。その後、サービスとして公開する関数を定義し、サーバーに登録することで、クライアントからの呼び出しが可能になります。

サーバーの起動

以下の例では、SimpleXMLRPCServerインスタンスを使ってサーバーを作成し、組み込み関数や独自に定義したカスタム関数を登録しています。最後にサーバーを無限ループに入れ、リクエストを受け付けて応答し続ける状態にします。

サンプルコード(サーバー側)

from xmlrpc.server import SimpleXMLRPCServer
from xmlrpc.server import SimpleXMLRPCRequestHandler
class RequestHandler(SimpleXMLRPCRequestHandler):
    rpc_paths = ('/RPC2',)
with SimpleXMLRPCServer(('localhost', 9000),
                        requestHandler=RequestHandler) as server:
    server.register_introspection_functions()
    # len() 関数を登録
    server.register_function(len)
    # 別名で関数を登録
    @server.register_function(name='rmndr')
    def remainder_function(x, y):
        return x // y
    # 関数名のまま登録
    @server.register_function
    def modl(x, y):
        return x % y
    server.serve_forever()

このサーバーを起動すると、クライアントプログラムから各関数を参照し、リモートで呼び出すことができます。なお、register_introspection_functions() を呼び出すことで、利用可能なメソッド一覧やヘルプ情報を取得するシステムメソッドも有効になります。

クライアントの実行

クライアント側では xmlrpc.client.ServerProxy を使ってサーバーに接続します。プロキシオブジェクト経由で、あたかもローカル関数のようにリモートの関数を呼び出せます。

サンプルコード(クライアント側)

import xmlrpc.client
s = xmlrpc.client.ServerProxy('https://localhost:9000')
print(s.len("Tutorialspoint"))
print(s.rmndr(12,5))
print(s.modl(7,3))
# 利用可能なメソッドの一覧を表示
print(s.system.listMethods())

実行結果

上記のコードを実行すると、次のような結果が得られます。

14
2
1
['len', 'modl', 'rmndr', 'system.listMethods', 'system.methodHelp', 'system.methodSignature']

このように、XML-RPCを使えばPython同士はもちろん、異なる言語やプラットフォーム間でも簡単にリモート手続き呼び出しを実現できます。内部処理の詳細を隠蔽しながら、シンプルなAPIで通信できるのが大きな魅力です。

  1. Linux CentOS/RHELでNFSサーバーとクライアントを設定する方法

    NFS(Network File System)は、ファイルやフォルダをネットワーク越しに共有するための分散ファイルシステムプロトコルです。ONC RPC(Remote Procedure Call)を基盤としており、リモートのファイルシステムをあたかもローカルディスクのようにマウントして利用できます。ただし、デフォルト設定ではデータ通信が暗号化されず、クライアント認証も行われない点に注意が必要です(アクセス制限はIPアドレス単位で設定可能です)。NFSはサーバー側・クライアント側のどちらも比較的簡単に設定できます。本記事では、CentOSをはじめとするRPM系Linuxディストリビューション

  2. Pythonで学ぶ相関と回帰分析の基礎|Seabornを使ったデータ分析入門

    相関(Correlation)とは、2つのデータセット間に存在する依存関係を含む統計的な関係性を指します。一方、線形回帰(Linear Regression)は、従属変数と1つ以上の独立変数の間の関係を直線的なアプローチで捉える手法です。独立変数が1つの場合は「単回帰」、複数ある場合は「重回帰」と呼ばれます。相関とは何か依存現象の身近な例としては、親と子の身体的特徴(外見)の類似性や、商品の価格と供給量の関係などが挙げられます。価格が上がれば供給量が増える、といった具合に、変数同士が互いに影響し合う様子を統計的に表したものが相関です。本記事では、Pythonの可視化ライブラリ「Seaborn」