人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

あるPerlやPHPやCで書かれたCGIから、大量(毎秒何十〜何千件)に大きな(数百KB〜数十MB)バイナリデータを送受信するサーバプログラムを作りたいと考えています。CGI側からみてライブラリが入手しやすく、かつもっともシステムへの負荷が軽く性能のでるプロトコルを採用したいと考えているのですが、お奨めはありませんか?
ちなみに、今のところXML-RPC,SOAP,CORBA,FTP,RCPなどを候補として考えています。
(注意:理由を明記ください。理由なしは申し訳ないですがポイントなしで)

●質問者: randk
●カテゴリ:コンピュータ
✍キーワード:CGI FTP KB MB Perl
○ 状態 :終了
└ 回答数 : 2/2件

▽最新の回答へ

1 ● karla
●20ポイント

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

CodeGuru: BASE 64 Decoding and Encoding Class 2003

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

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

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

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

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

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


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

◎質問者からの返答

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

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

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

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

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


2 ● nitscape
●40ポイント

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

◎質問者からの返答

ありがとうございます。

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

関連質問


●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ