他人に教える用です。あんまり面白くはないです。
低速サーバを構築する目的
会社のお仕事でFLVをプログレッシブダウンロードで読み込んで再生するFlashプレイヤーを作ったのですが、回線が速すぎて、下記の2つを検証できませんでした。
- ファイル読み込みが完了していない時点まで再生が進んだ場合
- せっかちなユーザーがシークバーを読み込みの完了していない部分まで引っ張ってしまった場合
本当はYoutubeみたいに途中から再生するやつを作りたかったんですが、面倒くさそうなんで後日。なにやらPHPで動画を切り出して渡すらしい。(参考:‘Streaming ‘ flv via PHP, take two)
なにはともあれ、低帯域の環境を再現する必要があったわけです。
thttpdに出会うまで
会社ではFlash CS3をMac OS X 10.5.8で使ってます。
Flashに低速環境を再現するモードがあった気がしたんですが、見つけられず。Device Centralにもそういう機能はなし。
WindowsだとNEGIESというソフトがあるようなんですが、Macだったので、ダメ。
さらに付け加えると、いちいちFTPしたくないので、Flashでパブリッシュしたらすぐ確認できるようなローカル環境が望ましい。リモート・サーバに上げるとかは無し。
で、探してみると、こんなエントリーが。
thttpdには、設定ファイル「thttpd.throttle」で、ファイルの拡張子毎に使用する帯域を設定できるというとても便利な機能がある。(Flashのテスト用に)低速に振舞うWebサーバを建てる
これで決まり。
thttpdをインストールしてから動くまで
一応、環境はこんな感じです。完全自己責任でお願いします。
- Mac OS X 10.5.8
- MacPortsにていろいろインストール済み
- makeしてインストールしたものはほとんどない(気がする)
さて、本家thttpdのサイトを見てみると、./configureしてmakeしてとか書いてある。MacPortsにないかなと探したけどなかった。
しかし、さらにググると、Mac OS Xにもパッチをあてれば入るらしいということが判明。
いわれたとおりにパッチを当ててからのインストールを試みる。デフォルトでは/usr/local/sbinにインストールされるとのこと。
ルートユーザになってない人は先頭にsudoを追加してください。
mkdir /usr/local/src #とりあえずダウンロード用のフォルダを作る。 cd /usr/local/src #移動 wget http://www.acme.com/software/thttpd/thttpd-2.25b.tar.gz #ダウンロード gunzip thttpd-2.25b.tar.gz #解凍 tar xpf thttpd-2.25b.tar cd thttpd-2.25b #フォルダ内に移動 wget http://do.homeunix.org/pub/thttpd-macosx.patch #パッチをダウンロード patch thttpd.c > thttpd-macosx.patch #パッチを適用
これでインストールできるはずだったんですが、./configureでエラー!
ググった情報を参考にしてとりあえずmakeまで終える。
./configure --host=darwin make
ここまではオッケー。しかし、make installでまた失敗。
手動でインストールした猛者もいるようですが、makeの仕方・仕組みがわからないので別の方法を探す。
これはbinというユーザーが存在しないため。Mac OS X 10.5でbinユーザーを作成する
な・る・ほ・ど〜。では、binを作成。
sudo dscl . create /Groups/bin sudo dscl . create /Users/bin
これでいいのか?
sudo make install
できたー!
さて、本家マニュアルにある通り、/etc/thttpd.confを編集しようとするが….存在しない! ここで絶望のズンドコにたたき落とされる。
ここで諦めず、Spotlightで検索。ダウンロードしたソースファイルの中に発見! これをコピーして使います。
cp /usr/local/src/thttpd-2.25b/contrib/redhat-rpm/thttpd.conf /etc/thttpd.conf
中身を編集。
# This section overrides defaults dir=/path/to/document_root nochroot user=<ユーザー名> #default=nobody logfile=/Users/<ユーザー名>/Library/Logs/thttpd.log pidfile=/Users/<ユーザー名>/Library/run/thttpd.pid # This section _documents_ defaults in effect port=8080 # nosymlink# default = !chroot # novhost # nocgipat throttles=/etc/thttpd.throttles # host=0.0.0.0 charset=utf-8
で、重要なのは13行目で指定したthrottlesファイル。これが帯域速度を制限するための設定ファイルです。これを作成します。
sudo vi /etc/thttpd.throttles #ファイルを作成 #Configuration File for thttpd **.flv 5000 #limit FLV files to 1/30 fo T1 #これでflvの拡張子が5000バイト/秒でしか読み込まれない
これで準備オーケー! 起動します。
cd /usr/local/sbin/thttpd -C /etc/thttpd.conf #面倒くさかったらパスを通してください。
http://localhost:8080 にアクセス! サーバー動いた! でも画面が真っ黒!
Firebug先生に聞いてみたところ、どうやらFlash埋込み用のJavascriptをHTMLとして解釈しているっぽいです。
ApacheでいうところのAdd type text/javascript が必要っぽい。しかし、ここはHTMLにJavascriptを直書きすることにして回避。
で、ようやっと動きました。いやー、プログレスバーが圧倒的に置き去りにできるようになりました。
ところで、このthttpdははじめっからデーモンで動いているっぽいです。
止め方がわかんなかったので、アクティビティモニタでthttpdを選択して「プロセス終了」終了。これで当初の目的は果たせました。
thttpdを使ってみての感想
やっぱりApacheほどは設定が細かくないし、CGIも激遅っぽいのでアレですが、throlltesだけでも使うメリットはありますね。
設定できる機能は他にもいろいろあるみたいなので、あとはマニュアル参照してください。
最近はiPhoneをはじめとする3G端末でもガンガンPCサイト見るので(iPhoneはFlashダメだけど)、帯域のパフォーマンス確認は必要です。
Docomo for PCとか、潰れかけのWillcomとかも3Gですしね。
あと、これからはGoogle先生もサイトのスピードを評価するらしいので、いろんなところで役に立つかも。
というわけで、終わり。