Cometでチャット
最近Cometについての話題が出たので調べました。
こういうことなわけですが、HTTPのコネクションをはりっぱなしにして、擬似的にサーバからデータをPushする技術です。
こういうことを考える人は目の付け所がすごいですね。尊敬します。
実際はTomcat6でCometのエンジンが載っているので、実装自体は結構容易です。
こちらやこちらにサンプルがあるので、参考になると思います。
ただ、サンプルはホントにHTTPのStreamを開きっぱなしなのでmod_proxyを経由する場合に都合が悪く、Tomcatに直接アクセスするとOKですが、Apache経由だとレスポンスが表示されないという問題がありました。
プログラムとして改良するならば、Ajaxのリクエストをつなげておいて、そのレスポンスでチャットの文字列を返す、つなぎなおす、つなげる、返す、、、という方法が取れると思います。
ただ、この場合データを受け取ったときに一度コネクションが切れてしまうのでタイミングがクリティカルな場合には工夫が必要と思います。
どっちにしろタイムアウトのケアとかも考えないといけないので、そのあたりの作りは単純化できそうな気がします。
一応上記のサンプルソースとディプロイファイルをあげておきます。
comet.zip
Lingrを作った方のブログにも書いていましたが、チャットのレスポンスがストレスないなどサービスを使う側のメリット、サーバやネットワークリソースの軽減など作る側のメリット、知っているといろいろうまみがありそうです。
