IEとCometの相性が悪い
IEでチャットにログインして,リロードしたりすると,反応が無くなる,という問題があるようで,調べてみた.
Firefoxの場合,Ajaxでサーバに接続中にリロードすると,その接続は切断される.
リロードした以上,そのページで発行したAjaxリクエストは処理を続行する必要がないと思うので,切断するのが普通なのではないかと思うのだけども,IEはそうではない模様.
IEの場合,リロードしても接続したコネクションが張りっぱなしになってしまう.
1ホストに対して同時2コネクションの制限はその状態でも有効なため,追加のAjaxリクエストが待たされて,投稿が出来なかったり,応答が無かったりするということのよう.
今のチャットだと,入室後に新規発言を待っている時は,Cometコネクションが1本.
そこでリロードすると,ページを表示し直すため,もう1回Cometコネクションが追加で張られる.
入室ボタンを押すと,別のAjaxリクエストで入室フォームをpostするのだけど,既に2本接続を張っているので,そのpostが遅延されてしまう.
うーん・・・
Lingrはどうやってるのかなーと思って調べてみたら,リロードするたびにComet先のホスト名が変わるようになっていた.
こういう回避策しかないのかな?
DNS周りもいじらないといけないから結構めんどくさそうだ.JSONPに変えたりもしないとだめそうだし...
色々罠が多い.(^^;
というわけでこの問題を直すのには少々時間がかかりそう.
The comments to this entry are closed.
Comments