ロングポーリングとストリーミングへの進化
従来のHTTPと現代的なライブデータ転送の橋渡しとなるロングポーリングについて、今も重要な場面とWebSocketsやSSEとの違いを理解します。
「ロングポーリングとストリーミングへの進化」はCoddyKit上の無料Real-Time Streaming Systems (WebRTC + Live Data)レッスンです。 これはレッスン4/4です。 下記で完全なレッスンを無料で読むことができます。その後、ブラウザ内の組み込みコードエディタと24時間対応のAIチューターでハンズオン演習できます。 これはReal-Time Streaming Systems (WebRTC + Live Data)学習パスの一部であり、ウェブとCoddyKitアプリ全体で進捗が同期されます。 Real-Time Streaming Systems (WebRTC + Live Data)コースには全4レッスンが含まれています。
このレッスンの一部はまだ翻訳されておらず、英語で表示されています。
Why Long Polling Exists
Before WebSockets and SSE were widely supported, developers needed a way to push data to clients over plain HTTP. Long polling filled that gap.
With long polling, the client makes a request and the server holds it open until new data is available, instead of replying immediately.
Short Polling vs Long Polling
Short polling hammers the server on a fixed interval, wasting requests when nothing changed.
- Short polling: request, immediate empty reply, wait, repeat.
- Long polling: request, server waits, replies only when data arrives.
Long polling cuts the volume of empty responses dramatically.
The Long Polling Cycle
The lifecycle is a loop:
- Client sends a request.
- Server holds it open (often with a timeout).
- When an event occurs, the server responds.
- Client processes data and immediately reconnects.
A Simple Client Loop
A long polling client recursively re-issues the request after each response. This keeps a near-continuous channel open.
async function poll() {
try {
const res = await fetch('/api/updates');
const data = await res.json();
handle(data);
} catch (e) {
console.error(e);
}
poll();
}
poll();Server Side: Holding the Request
On the server, you avoid replying until an event fires or a timeout is reached. This often uses an event emitter or a pending-promise registry.
app.get('/api/updates', (req, res) => {
const onEvent = (data) => {
res.json(data);
emitter.off('update', onEvent);
};
emitter.on('update', onEvent);
setTimeout(() => {
emitter.off('update', onEvent);
res.status(204).end();
}, 30000);
});Timeouts Matter
Never hold a request forever. Proxies, load balancers, and mobile networks will silently drop idle connections.
Use a server-side timeout (for example 30s) that returns an empty 204, prompting the client to reconnect cleanly.
Handling Reconnection Gaps
Between a response and the next request there is a tiny window where events could be missed. Use a cursor or last-seen ID so the server can replay anything that happened during the gap.
GET /api/updates?since=10427Long Polling vs WebSockets
- WebSockets: one persistent, bidirectional connection. Lowest latency.
- Long polling: repeated HTTP requests. Higher overhead but works everywhere HTTP works.
WebSockets win for chat and games; long polling wins for hostile network environments and legacy proxies.
Long Polling vs SSE
SSE keeps one connection open and streams many events down it. Long polling reopens a connection per event.
SSE is generally more efficient for unidirectional push, but long polling has broader compatibility and simpler proxy behavior.
Where Long Polling Still Wins
- Corporate networks that block WebSocket upgrades.
- Old proxies that buffer streaming responses.
- Serverless platforms with short execution limits, used as a fallback.
Many libraries (Socket.IO included) fall back to long polling automatically.
Scaling Considerations
Each held request consumes a server slot. With thousands of clients you need non-blocking I/O (Node, Go, async Python) so held requests do not exhaust threads.
Sticky sessions or a shared pub/sub layer (Redis) let multiple servers coordinate events.
Quick Check
Test your understanding of long polling.
Recap
Long polling holds an HTTP request open until data is ready, then the client reconnects. It bridges classic HTTP and true streaming.
- More efficient than short polling.
- Less efficient than WebSockets/SSE, but more compatible.
- Use timeouts and a cursor to stay reliable.
よくある質問
「ロングポーリングとストリーミングへの進化」レッスンは無料ですか?
はい。「ロングポーリングとストリーミングへの進化」の完全なテキストはこのウェブで無料で読めます。インタラクティブに演習し(組み込みコードエディタと24時間対応のAIチューター)、Real-Time Streaming Systems (WebRTC + Live Data)コースの残りをアンロックするには、CoddyKit PROにアップグレードしてください。 Real-Time Streaming Systems (WebRTC + Live Data)コースには全4レッスンが含まれています。
「ロングポーリングとストリーミングへの進化」で何を学びますか?
従来のHTTPと現代的なライブデータ転送の橋渡しとなるロングポーリングについて、今も重要な場面とWebSocketsやSSEとの違いを理解します。 ブラウザで直接実行するハンズオンコードでReal-Time Streaming Systems (WebRTC + Live Data)を演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。
Real-Time Streaming Systems (WebRTC + Live Data)を始めるのに経験は必要ですか?
事前経験は必要ありません。CoddyKitのReal-Time Streaming Systems (WebRTC + Live Data)は初級者から上級者向けに構成されているため、ここから始めるか最初から始めて、自分のペースで進むことができます。 これはレッスン4/4です。
「ロングポーリングとストリーミングへの進化」レッスンにはどのくらい時間がかかりますか?
ほとんどのCoddyKitレッスンは約5~10分かかります。各レッスンはコンパクトでインタラクティブなので、着実に進歩し、ウェブとアプリ全体で正確に前回の場所から再開できます。
このReal-Time Streaming Systems (WebRTC + Live Data)レッスンでコードを書いて実行できますか?
はい。すべてのReal-Time Streaming Systems (WebRTC + Live Data)レッスンに組み込みコードエディタが含まれているため、ブラウザでリアルコードを書いて実行し、即座のAIフィードバックを取得できます。ローカル設定は不要です。
このコースのすべてのレッスン
- ライブデータと従来のHTTP
- 双方向通信のためのWebSocket
- 一方向プッシュのためのServer-Sent Events(SSE)
- ロングポーリングとストリーミングへの進化