Cometに自分の最近のダメさ加減を知る

 Ajax関係の一つの技術にCometというものがあるそうな。Cometとはどのような技術かというと、HTTPサーバからHTTPクライアントに任意のタイミングでメッセージを送ることを擬似的に実現する技術。通常そんなことが出来るわけない。普通に考えれば、1) HTTPクライアントからポーリング、2) HTTPクライアントがJavaActiveXなど何らかの方法で別ポートをリスンするスレッドを上げる、ぐらいしか方法が浮かばない。しかし、1)は無駄なリクエストがサーバにガンガン飛ぶのでサーバ負荷で破綻するだろうし、2)は通常のWebアクセスでの利用しか想定していないファイアウォール制限がある環境では使えない。
 じゃあ、Cometはどうしているのか。 簡単に言うと、「HTTPクライアントがHTTPリクエスト(多分長めのタイムアウトをするようなもの)をとりあえずサーバに投げておいて、サーバはそれを掴んでおいてクライアントにデータを返したいタイミングでHTTPレスポンスを返す」というものだ。これで擬似的に任意のタイミングでサーバはメッセージを返すことが出来ることになる。コールバック関数みたいなものだな。
このからくりを聞いたとき、これは面白いと思った。ただ、言われればすげえ単純な話だ。コロンブスの卵って奴だな。また、Cometの技術を使って高いパフォーマンスを出すためには既存のWebサーバのアーキテクチャではダメで、その実現には新しいhttpdサーバの実装が必要だそうな。しかし、その問題は想像がつくし、解決のための実装の想像は付く。
 だからといって、自分ならこの技術の実装にたどり着けただろうか?いやたどり着かないね。最近思うのだが、問題設定能力がないんだよね、俺って。おそらく、「HTTPサーバからHTTPクライアントに任意のタイミングでメッセージを送る方法を示せ、ただし、ポーリング禁止、別ポートリスン禁止(10点)」っていう問題があれば、ウンウン考えているうちに出来るかもしれない。特に頭の柔らかい10年前なら思いついたに違いない。ただ、こういう問題形式で出されないと絶対に既存の方式以外の方法を思いつこうという方向に頭が行かないんだよね。あと、高いパフォーマンスが要求されたときに既存の実装を捨てて新しいアーキテクチャで実装しなおすという提案に体がいかないと思う。これも「既存の実装は使うのは禁止、その場合どのような設計すればよいか示せ(20点)」とかあればやると思うけど、そんなことより、サーバのチューニングやサーバ機の性能向上に頭がいってしまうと思うのだ。
 どうも、あれだ、課題から問題を設定する能力と言うか、課題を解決するためにゼロベースで考え抜く力っていうかが、元からか最近か、なくなってしまったようだ。すべて今のやり方ベースだったり、ちょこちょこっとした改善だったりから頭が出て行かない。安易な解決にすぐいってしまう。
 今の仕事を考えると結構致命的だよ、これ。
 そういえば仕事の場所が今日から新人の時の場所"豊洲"に戻った。だからということもないが、「モザイク」とか「電子メール」とかってものに感動していた新人時代のフレッシュな頭に戻って仕事をしたいものだ。