perlの方はnaoyaさんのApache::XMLRPC::Lite を使った mod_perl ハンドラによる XML-RPC サーバのエントリを参考にApache::XMLRPC::LiteとClass::DBIを使って実装し、PHPの方はXMLRPCの実装にXML-RPC for PHPにあるライブラリを使い、DBとの連携は組み込みのmysql_connectとかを使って実装してみました。ちなみにPHPはまともに動くコードを初めて書きましたが、意外と書けるものですねw
ベンチマークにはabを使い、同時接続数が1,5,10,20の場合をそれぞれ測定してみました。
>
<
ab -n 100 -c 1 -T text/xml -p post.txt -w http://horiuchi.vcube.net/zipconv/xmlrpc > result.html
以下結果です。
-Apache::XMLRPC::Lite
-Apache::XMLRPC::Lite(レスポンスを強制的にbase64にした場合)
-PHP
-CGI ( perl )
レスポンスを強制的にbase64にした場合を測定したのはSOAP::Liteのドキュメントにそうするとパフォーマンスをあがるというようなことが書かれていたので試してみました。
ですが、結果としてはそれほどパフォーマンスはあがってません。逆に同時アクセス数を大きくするとパフォーマンスが落ちてしまいました。
また、PerlとPHPではそれほどパフォーマンスに違いがないようです。
PHPだと劇的に早いという結果になったらPHPにしようかとも思ったのですが、結局どちらにしても違いはそれほどなさそうなので、得意のPerlで行くことにしました。
結構はやいのかな。。。
返信削除こういうテストのエントリー参考になります。
サーバの方は運用上問題ない速度がでるように思います。
返信削除逆にクライアントの方がXMLをパースする分、遅くなりますね。
パースに、XML::Simpleを使ったら1秒くらいかかって使い物にならない感じでした。
クライアントのサーバのスペックをあげればXML::Simpleでもそんなに遅くはならないと思いますが、大量のアクセスを想定するようなサービスの場合は正規表現とか使ってXMLをパースした方が良さそうです。