質問: あるPerlやPHPやCで書かれたCGIから、大量(毎秒何十〜何千件)に大きな(数百KB〜数十MB)バイナリデータを送受信するサーバプログラムを作りたいと考えています。CGI側からみてライブラリが入手しやすく、かつもっともシステムへの負荷が軽く性能のでるプロトコルを採用したいと考えているのですが、お奨めはありませんか? ちなみに、今のところXML-RPC,SOAP,CORBA,FTP,RCPなどを候補として考えています。 (注意:理由を明記ください。理由なしは申し訳ないですがポイントなしで)
回答: File Transfer Protocol - Wikipedia 何をどのように送りたいかという細かい条件にもよりますが(独自プロトコルがNGかつ単純にデータの送受信のみでしたら)FTPがベストだと思います。FTPはその名前の通りファイルを転送するために作られたプロトコルで、大量のデータ送受信に適したものですから。 テキスト系の転送の場合はバイナリ->アスキー変換(BASE64など)が入ったり、アスキー部分の解釈(XMLパーサーなど)が入るなど負荷が大きく、かつ、転送量も増大します(目安的には3倍の増大ぐらいでしょうか?)。 素のバイナリ送受信でも仮に10~1000件/secで1転送100K~10MBとすると、10~1000/sec*100K~10MB*8bit/B=80M~80Gbpsになります。ここまでの要求仕様ですとサーバーとラインを相当数用意しないと厳しいです。また(少なくともゲートとなるサーバーは)PerlやPHPなどの言語やテキスト系の転送プロトコルでは捌ききれないと思います。そのことを考えてもFTPがいいと思います。