覚書:PerlとAjaxの連携 の続きというか愚痴というか
昨日、WebサーバのCGI(Perl)とクライアントのAjaxを連携するために、どうやってSessionを使うかを示したわけだが、当初、考えていたことは実現できないことに気付いた。
というのも、Wizardry for Ajaxを作るための実験を@homepage上でやろうとしている。迷路データとかユーザデータとかを呼び出しごとに毎回、ファイルから読み込むのは遅くなる要因となるので、Sessionを使ってオブジェクトを継続できたら早くなるじゃん、と思ったのだ。
でも、CGIは、呼び出し毎にプロセスが生成されるので、呼び出し毎の処理間に継続性はなくて完全に独立している。つまり、オブジェクトを生成してもプロセス毎に寿命が尽きるので、Sessionで渡せるわけがない。やってみたから間違いない(T_T)。
※:Sessionは、どうやら文字列しか渡せないようなのだ。(オブジェクトも渡せると思い込んでしまっていた。まだちゃんと調べていないけど)
Session間で同じオブジェクトを扱うには、オブジェクトをシリアライズ(この場合は、オブジェクトのメンバ変数の値を文字列化)して、次のSessionでメンバ変数に値を設定するようにするしかないと思われ。
ということは、迷路データとか変化しないものを持つオブジェクトをシリアライズする必要性は全くなくなってしまう。適切なデータ形式のファイルなら、毎回、そのファイルを読み込めば良いわけ。
JSPならWebサーバのプロセスで、オブジェクトを継続して持てる(Applicationだっけ?)ので、話は楽なんだけどな。
とまぁ、失敗談をつらつらと書いてしまったが、本を読まないと書くネタが半減してしまって、困ってしまう。情報処理技術者試験対策中なので、いつも本読みタイムである通勤時間に、教本を眺めているのだ。あともう少しで試験なので、そこを過ぎれば、積読を消化できる!
さて、初めは何を読もうかな?リハビリの意味を込めてラノベから行きますか。というわけでDOORSに決定!
試験をがんばろ。
« 覚書:PerlとAjaxの連携 | トップページ | 我々は何を知っているのだろうか? »
コメント