ののぐらむ作業報告書

ののぐらむ(お絵書きロジック)

分散化大作戦

作業報告書(パズル日記)

1998年 2月15日


1998年2月15日

2月11日より大変なアクセスにみまわれ、そろそろ分散化を考えないとと いうか、対策を立てざるを得なくなった。

通常のウェッブページは、いくら分散化させてもたいしたことはない。フォー ムでCGIを使っていたら、その部分だけを現状のマシンに向ければいいだけで ある。

Javaを使っていても、ほとんど同じである。しかし、Javaアプレットの中か ら、CGIを呼んだりすると、なかなか自由度が限られるのである。Javaアプレッ トを持ってきたサーバーとは自由に交信できるが、他のマシンとは無理なので ある。もちろん、間に中継するCGIをかませるとかすれば可能であるが、どこ のプロバイダでもCGIをやらせてくれる訳ではないし、別途お金を取られたり する。

それで、いろいろ調べた挙げ句、次のような方法をとることにした。HTMLファ イルは分散化できるようにする。しかし、CGI、データベースとからむものは、 現状の場所に置いておくしかない。それで、CODEBASEを現状のマシンの対応場所 にして、HTMLファイルのなかを以下のように変更した。

<APPLET CODEBASE="http://www.pro.or.jp/~fuji/java/try/nonogram"
		CODE="NonogramApplet.class" WIDTH=100 HEIGHT=50>
  <PARAM name=problem value="nono.000003.prob">
  JAVAでない方は、見ることができません。<BR>残念でした。あきらめてください。
</APPLET>

このようになったのを、どこかの安〜い単機能のレンタルサーバーに置いた 場合、クラスファイルは CODEBASE に従って、現在の www.pro.or.jp/~fuji の下にあるものを取っていく。

クラスファイルだけではなく、問題データファイルも、CODEBASEで指定した ところから取っていかないと駄目である。DocumentBaseはHTMLファイルを置い ているマシンであるが、classファイル、データファイル、CGI 、いずれも CODEBASEで指定したところに取りに行く。

さて、これで、データベースも大丈夫だ。一旦 CODEBASE で指定したマシン にいってしまえば、あとは何だってできないことはない。もう、Javaのネット ワークの制限からも解放される。

ここまでなら、簡単なことであるが、ちょっとはまってしまった。以上の変 更をして、アップしてテストをしていたのであるが、proxy 経由でつないだ時 だけ、最新の状態にならないのである。う〜ん、どうしようと十分悩んだ末、 Shift + Reload しなければならないのに気がついた。proxy のキャッシュに 残っていた古いのがいつまでも取り込まれていたので、Shift + Reload で キャッシュをリフレッシュしなければならないのであった。

以上で、一応、ある程度の分散化ができるのである。しかし、これではまだ 問題が1つ残る。それは、サーバーに置かずに、fileとして見た時、CODEBASE で http://www.pro.or.jp/~fuji なんてことを書いていると、そこからクラス ファイルを取ろうとするではないか。これでは、オフラインで簡単に実行して もらえないではないか。たとえば、ディレクトリの一部をフロッピー、MO、 CD-Rに入れて、ちょっとデモして見せるなんてこともしたいのである。

さて、こんどは、どうしようか。fileとして動かすだけの時には、CODEBASE は不要なのである。もちろん、コードとドキュメントが同一だった今までも CODEBASEの指定は無かった。

しかし、CODEBASEの指定は、Javaアプレットからはできない。Javaアプレット の存在位置を、起動前に指定するなんて、Javaアプレットを使ってはできない。 どうしようか。もう打つ手はないか。でも、簡単なテストなんか、サーバーに 上げずに、ファイルとしてテストできた方がお手軽だ。

それで、十分に悩んだ末、あまり使わないようにしている JavaScript を使 うことに踏み切った。document.location によって、Documentがどこから来て いるかが分かる。これが、file で始まっているか、http で始まっているかで 区別するようにすることで、ローカルのファイルでも、今までのサーバーでも、 新たなサーバーでも、今までと同様に動くように何とかでっちあげることはで きたが、以外と変更がある。


ののぐらむ作業報告書