SummerWind

Web, Photography, Space Development

PerlでXML-RPCを使ってみる

近いうちにWebサーバーを立ち上げなくても使えるような、シンプルなクライアントサーバーシステムが必要になりそうだったので、週末にちょこっとXML-RPCを試していました。今回はPerlのXML-RPC関連ライブラリを使ってクライアントとサーバーの両方のスクリプト作って遊んでみました。作るといってもほとんどWeb上に書かれているサンプルそのまま程度ですがメモ代わりにまとめておきます。

まずはサーバー側の実装から。次に示すのがサーバー側のコードで、XMLRPC::Transport::HTTP::Daemonを使っています。dispatch_toメソッドにパッケージ名を指定しておくことで、クライアントからの要求に応じて指定されたパッケージ内のメソッドが呼び出される仕組みです。

#! /usr/bin/perl

use strict;
use warnings;
use XMLRPC::Transport::HTTP;

my $daemon = XMLRPC::Transport::HTTP::Daemon
   -> new (LocalPort => 8080)
   -> dispatch_to("xmlrpc");
$daemon->handle;

package xmlrpc;
sub hello {
   return "Hello World!\n";
}

続いてクライアント側の実装を。クライアント側ではXMLRPC::Liteを用いて、サーバーに要求を送ります。proxyメソッドで送信先を指定し、callメソッドでサーバー側で呼び出すメソッドを指定する形式です。コードは次のようになります。

#! /usr/bin/perl

use strict;
use warnings;
use XMLRPC::Lite;

my $result = XMLRPC::Lite->proxy("http://localhost:8080/")
   ->call("xmlrpc.hello")
   ->result;

print $result;  # => "Hello World!"

これでサーバー側のスクリプトを実行しておいて、クライアント側のスクリプトを実行すれば通信ができるわけです。せっかくのXML-RPCなのに今回はXMLを使っていないところが微妙ですが、シンプルなクライアントサーバーシステムを作るには手軽で良いと思います。今後はもう少しXML-RPCとSOAPについてを勉強して、もっと使いこなしてみたいですね。

Moto Ishizawa

Moto Ishizawa
ソフトウェアエンジニア。ロケットの打上げを見学するために、たびたびフロリダや種子島にでかけるなど、宇宙開発分野のファンでもある。