fbpx

メニュー

Flashの低帯域ユーザ体験を再現するための低速サーバ構築 on Mac OS X

高橋文樹 高橋文樹

この投稿は 14年半 前に公開されました。いまではもう無効になった内容を含んでいるかもしれないことをご了承ください。

他人に教える用です。あんまり面白くはないです。

低速サーバを構築する目的

読み込みが速すぎて検証できないよ..
読み込みが速すぎて検証できないよ..

会社のお仕事で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先生もサイトのスピードを評価するらしいので、いろんなところで役に立つかも。

というわけで、終わり。

すべての投稿を見る

高橋文樹ニュースレター

高橋文樹が最近の活動報告、サイトでパブリックにできない情報などをお伝えするメーリングリストです。 滅多に送りませんので、ぜひご登録お願いいたします。 お得なダウンロードコンテンツなども計画中です。