あるPerlやPHPやCで書かれたCGIから、大量(毎秒何十〜何千件)に大きな(数百KB〜数十MB)バイナリデータを送受信するサーバプログラムを作りたいと考えています。CGI側からみてライブラリが入手しやすく、かつもっともシステムへの負荷が軽く性能のでるプロトコルを採用したいと考えているのですが、お奨めはありませんか?

ちなみに、今のところXML-RPC,SOAP,CORBA,FTP,RCPなどを候補として考えています。
(注意:理由を明記ください。理由なしは申し訳ないですがポイントなしで)

回答の条件
  • URL必須
  • 1人2回まで
  • 登録:
  • 終了:--
※ 有料アンケート・ポイント付き質問機能は2023年2月28日に終了しました。

回答2件)

id:karla No.1

回答回数130ベストアンサー獲得回数4

ポイント20pt

http://www.codeguru.com/cpp/cpp/algorithms/article.php/c5099/

CodeGuru: BASE 64 Decoding and Encoding Class 2003

質問内容の情報だけだと判断しにくいですが・・・

クライアントはブラウザではなく独自のものでしょうか?

単純に転送速度と負荷に重視するならば、C言語で作り、FastCGIで常駐させ、ベタにデータ送信が一番じゃないかと思います。

いくつかプロトコルを検討されているようですが、プロトコル自体がライブラリやヘッダの処理がありオーバーヘッドになります。

ファイル名、サイズを先頭につけ、バイナリデータはBase64あたりでエンコードかバイナリのまま送信。

データを圧縮すればサーバ負荷は増えますが転送効率があがります。


もう少し関連する環境や具体的な使用方法などを書かれたほうが、よりよい回答がつくと思いますよ。

id:randk

ご回答ありがとうございます。

質問にありますとおり、『クライアントが』CGI(あるいはそれに類するサーバ側駆動プロセス)です(ブラウザではありません)。

サーバはクライアントとIP上で接続できればCGIである必要はありません(FTPとか書いていますとおり、HTTPである必要はありません。)。

不特定多数のクライアントにサービスを提供するサーバプログラムを検討しているため、クライアント側の実装を円滑にするため独自手順ではなくなんらかなの規約化されたプロトコルを採用したいと考えています。

多量のデータ送受信の場合単純なデータ量の問題だけでなく、TCPコネクションのオーバーヘッドをどうさばくかなど一概にデータ量だけでは語れないポイントがでてくるとおもうのですが、それらを踏まえたうえで、おすすめいただければ幸いです。環境はUnix系サーバを想定しています。

2005/12/25 01:58:29
id:nitscape No.2

回答回数526ベストアンサー獲得回数0

ポイント40pt

http://ja.wikipedia.org/wiki/Ftp

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がいいと思います。

id:randk

ありがとうございます。

シンプルイズベストですかねー。

2006/01/01 17:41:51

コメントはまだありません

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

回答リクエストを送信したユーザーはいません