XMLHttpRequest
HTTPの接続を張りっぱなしにしておいて、サーバーから情報を送りたいときに初めてレスポンスを返すことをロングポーリングと呼ぶ。Cometの実装に使われる。利用時に以下の注意点がある。
ブラウザのHTTP接続のタイムアウト(30秒など)があるため、接続が切れたら、接続し直すロジックが必要である。
サーバー当たりの同時接続数が、初期設定では、Internet Explorer 8以降や Internet Explorer 以外の主要ブラウザでは6、Internet Explorer 7以前では2に制限されているため、複数のロングポーリングをこの制限まで同時に行うと、新たにサーバーに接続できなくなる。ダイアルアップ接続の場合、Internet Explorer 8でも同時接続数は2に制限されている。
HTTPの接続が終了するまでサーバーが終了できなかったり、接続ごとにスレッドを作成し、同時接続数が多いとそれがメモリなどのリソースを大量に消費するなどの問題があるため、ロングポーリングに対応したサーバー側の実装方法が必要である。例えばJavaの場合は、Jettyならば独自のContinuationクラス、Apache Tomcatならば独自のCometProcessorクラスなど、Servlet 3.0ならばHTTPServletRequestにstartAsync()が用意されていて、それらのロングポーリング用のAPIを活用することが望ましい。
なおこれらの問題を根本的に解決することを目的として、IETF・W3C他で2011年に代替プロトコルであるWebSocketが標準化された。