WebSocket Drops Connection with No Automatic Reconnection
Your application's WebSocket connection drops after network interruptions, server restarts, or idle timeouts, and never attempts to reconnect. Users see stale data, missing notifications, and a broken real-time experience until they manually refresh the page.
WebSocket connections are inherently fragile. Mobile networks switch between WiFi and cellular, laptops sleep and wake, load balancers have idle timeouts, and servers restart during deployments. Without automatic reconnection, every one of these common events breaks your app for affected users.
The issue is worst on mobile devices where network conditions change frequently. Users may not realize their connection is dead until they wonder why they haven't received any updates in minutes.
Error Messages You Might See
Common Causes
- No reconnection logic — The code creates a WebSocket connection but has no 'onclose' or 'onerror' handler to trigger reconnection
- Single connection attempt — The connection is established once on page load and never retried
- Missing heartbeat/ping — No keepalive mechanism to detect dead connections before the OS TCP timeout (which can be minutes)
- Server-side idle timeout — Load balancers or proxies (Nginx, Cloudflare) close idle WebSocket connections after 60-120 seconds
- No state recovery after reconnect — Even when reconnection works, missed messages during the disconnection are never recovered
How to Fix It
- Implement exponential backoff reconnection — On disconnect, retry at 1s, 2s, 4s, 8s, 16s intervals up to a maximum of 30s. Add jitter to prevent thundering herd
- Add client-side heartbeat — Send a ping message every 30 seconds and expect a pong within 5 seconds. If no pong, treat the connection as dead and reconnect
- Use a WebSocket library with built-in reconnection — Libraries like reconnecting-websocket, Socket.IO, or Ably handle reconnection automatically
- Implement message recovery — Track the last received message ID. On reconnect, request missed messages from the server since that ID
- Show connection status to users — Display a banner when disconnected so users know data may be stale
Real developers can help you.
You don't need to be technical. Just describe what's wrong and a verified developer will handle the rest.
Get HelpFrequently Asked Questions
Why does my WebSocket disconnect after 60 seconds of inactivity?
Most load balancers and reverse proxies (Nginx, Cloudflare, AWS ALB) have a default idle timeout of 60-120 seconds. Send periodic ping messages (every 30s) to keep the connection alive, or increase the proxy timeout.
Should I use WebSocket or Server-Sent Events?
Use WebSocket for bidirectional communication (chat, collaborative editing). Use SSE for server-to-client only (notifications, live updates). SSE has built-in reconnection and is simpler to implement.