« Erlangのデータ保存方法の速度比較 | Main | oregexp動いた »

Wednesday, May 16, 2007

IEとCometの相性が悪い

IEでチャットにログインして,リロードしたりすると,反応が無くなる,という問題があるようで,調べてみた.

Firefoxの場合,Ajaxでサーバに接続中にリロードすると,その接続は切断される.
リロードした以上,そのページで発行したAjaxリクエストは処理を続行する必要がないと思うので,切断するのが普通なのではないかと思うのだけども,IEはそうではない模様.

IEの場合,リロードしても接続したコネクションが張りっぱなしになってしまう.
1ホストに対して同時2コネクションの制限はその状態でも有効なため,追加のAjaxリクエストが待たされて,投稿が出来なかったり,応答が無かったりするということのよう.

今のチャットだと,入室後に新規発言を待っている時は,Cometコネクションが1本.
そこでリロードすると,ページを表示し直すため,もう1回Cometコネクションが追加で張られる.
入室ボタンを押すと,別のAjaxリクエストで入室フォームをpostするのだけど,既に2本接続を張っているので,そのpostが遅延されてしまう.
うーん・・・

Lingrはどうやってるのかなーと思って調べてみたら,リロードするたびにComet先のホスト名が変わるようになっていた.
こういう回避策しかないのかな?
DNS周りもいじらないといけないから結構めんどくさそうだ.JSONPに変えたりもしないとだめそうだし...
色々罠が多い.(^^;

というわけでこの問題を直すのには少々時間がかかりそう.

|

« Erlangのデータ保存方法の速度比較 | Main | oregexp動いた »

Comments

The comments to this entry are closed.

TrackBack


Listed below are links to weblogs that reference IEとCometの相性が悪い:

« Erlangのデータ保存方法の速度比較 | Main | oregexp動いた »