アプリ版:「スタンプのみでお礼する」機能のリリースについて

アクセス人数制限CGIについて。

お世話になります。

特定ファイルに同時アクセスする人数を制限して、制限を越えたら
「しばらくお待ちください」みたいなメッセージを表示するCGI、
あるいは他の方法でもよいのですが、何か方法があるでしょうか。

理由は150Kbps約60分のストリーミングファイルを公開したいのですが、
レンタルサーバのデーター転送制限の関係で、2人までの同時アクセスは
セーフで、3人になると転送制限を超えてしまいアウト。サーバ屋さんから
怒られてしまいます。

なんとかこのファイルを公開していので、皆さんのお知恵を拝借させて
ください。

A 回答 (3件)

PHPのセマフォーを使うと、同時セマフォーゲットを指定でき、


それを越えた時点で、待ち状態にできるので、
望みの処理が可能になると思います。
要するに、ホームページをPHPで記述するということですね。

この回答への補足

YkazubonY さん ご返事ありがとうございます。

自分はプログラム製作の経験がなく、HPHは、既存のアクセス解析を設置した経験しかありません。
そのような訳で、本件で初心者にヒントになるサイトがありましたらご紹介ください。

補足日時:2010/06/30 13:43
    • good
    • 0

psコマンドで同名CGIのプロセス数を数える、くらいでよければ、


どこのレンタルサーバでもできそうだし、処理も簡単かと思います。

この回答への補足

netaninja さん お答えありがとうございます。

自分はプログラムを作ったことがなく、CGIは既存のものに多少表示などの変更をする程度の
知識しかありません。どこか、本件の参考になるサイトがありましたらご紹介してください。

補足日時:2010/06/30 13:32
    • good
    • 0

プログラム的には簡単とはいえ、


unixコマンドとかhttpの予備知識がないとキツいでしょうね・・

とりあえずperlのサンプルです。
ただ書いただけで、動作確認はしてません。

------------------------
#!/usr/bin/perl
my $fn='largefile.flv';
my @ps=`ps ax | grep $fn | grep -v 'grep'`;
if(@ps>2){
  print "Content-type: text/html\n\n";
  print "<html><head></head><body>Overloaded.</body></html>\n";
  exit;
}
print "Content-type: video/flv\n";
print "Content-Disposition: inline; filename="$fn"\n\n";
system("cat $fn");
exit;
-------------------------

・最初の'largefile.flv'は、公開したいストリーミングファイル名に変更して下さい。
 ただし、ファイル名が日本語だと、保存しようとした時に化けます。
 対応するとけっこうタイヘンなんです。詳しくは
 http://cydn.cybozu.co.jp/office/2008/07/post_1.h …

・Content-Typeをprintしている行のvideo/flvは、flv動画の場合です。
 ストリーミングファイルの種類に応じて、変更する必要があります。
 Content-Typeについては、
 「動画 content-type」でぐぐってください。

・psコマンドについては、
 http://www.garunimo.com/program/linux/linux11.xh …

このCGIを<a>タグなり、flashプレイヤーの<object>タグなりの
もともとのストリーミングファイルの代わりに指定します。

#前回の回答には「同じCGI名を数える」と書いてましたが、
#cat使ったのでファイル名を数えました。

この回答への補足

ご返事遅れました。

早速アドバイスのCGIを下記のように書き換えて試したところ、500番サーバエラーになってしまいました。レンタルサーバは「ステップサーバ」です。

映像ファイルの指定を.asxではなく、元の.asfにしてみたりと試したのですが、ダメでギブアップしました。再度アドバイスよろしくお願いいたします。

***
#!/usr/local/bin/perl
my $fn='video_001.asx';
my @ps=`ps ax | grep $fn | grep -v 'grep'`;
if(@ps>2){
  print "Content-type: text/html\n\n";
  print "<html><head></head><body>Overloaded.</body></html>\n";
  exit;
}
print "Content-type: video/asx\n";
print "Content-Disposition: inline; filename="$fn"\n\n";
system("cat $fn");
exit;

***
Internal Server Error
The server encountered an internal error or misconfiguration and was unable to complete your request.
Please contact the server administrator, info@stepserver.jp and inform them of the time the error occurred, and anything you might have done that may have caused the error.

More information about this error may be available in the server error log.

補足日時:2010/07/19 13:14
    • good
    • 0
この回答へのお礼

サーバエラーの原因は、
×print "Content-Disposition: inline; filename="$fn"\n\n";
○print "Content-Disposition: inline; filename=$fn\n\n";
でした。

映像は、映像本体のasfと、そのメタファイルのasxになっていたので、実行ファイルはasx。プロセス用はasfと、切り分けて設定して、動作させることができました。

おかげさまで映像ファイルを公開できることができました。ありがとうございました。

お礼日時:2010/07/23 23:08

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!