WebSockets mach yaj
HTTP request-response ghaH: client jey, server jang, connection Qu'. model Qaw' server client vaD vay' jatlh poQ (jey pagh): chat message, stock price, build Qu'. WebSockets 'oH Qotlh: wa' long-lived connection, side Hoch message nob poH Hoch, HTTP per-request overhead pagh.
poll Qatlh?
WebSockets qaSpa' polling: client "chu' ghaj'a'?" jey cha' lup Hoch.
setInterval(async () => {
const response = await fetch('/api/messages/latest');
const messages = await response.json();
renderNewMessages(messages);
}, 3000);
Qu' 'ach Qagh: poll tlhoy' vaj update tlhoy'; poll nom vaj HTTP requests waste (TCP handshake overhead, headers, server handling) "choHbe'" ghoS. WebSocket connection wa'logh poSmoH 'ej actual data neH nob, Dung Hoch.
handshake: HTTP 'ach pIm
WebSocket connection normal HTTP request ('Upgrade' header) qaS. server protocol choH jang, TCP connection WebSocket framing lo'.
GET /chat HTTP/1.1
Host: example.com
Upgrade: websocket
Connection: Upgrade
Sec-WebSocket-Key: dGhlIHNhbXBsZSBub25jZQ==
Sec-WebSocket-Version: 13
HTTP/1.1 101 Switching Protocols
Upgrade: websocket
Connection: Upgrade
Sec-WebSocket-Accept: s3pPLMBiTxaQ9kYGzzhZRbK+xOo=
hand chenmoH pagh - browser WebSocket API 'ej server libraries Qu'. Sov Dun: ws:// pagh wss:// (TLS) URL lo'; WebSocket HTTP request rap block laH: origin checks, Upgrade support pagh proxies, firewalls.
client side
const socket = new WebSocket('wss://example.com/chat');
socket.addEventListener('open', () => {
console.log('connected');
socket.send(JSON.stringify({ type: 'join', room: 'general' }));
});
socket.addEventListener('message', (event) => {
const data = JSON.parse(event.data);
console.log('received:', data);
});
socket.addEventListener('close', (event) => {
console.log(`connection closed: ${event.code} ${event.reason}`);
});
socket.addEventListener('error', (event) => {
console.error('socket error', event);
});
loS events lifecycle Hoch: open (handshake Qu'), message (frame Hoch), close (connection Qaw'), error (transport failure). text pagh binary. request/response pairing built-in pagh - reply message rap vaj application protocol (id payload Daq).
minimal server, Node ws library
import { WebSocketServer } from 'ws';
const wss = new WebSocketServer({ port: 8080 });
const clients = new Set();
wss.on('connection', (socket) => {
clients.add(socket);
console.log(`client connected, ${clients.size} total`);
socket.on('message', (raw) => {
const message = JSON.parse(raw.toString());
// broadcast to everyone except the sender
for (const client of clients) {
if (client !== socket && client.readyState === client.OPEN) {
client.send(JSON.stringify(message));
}
}
});
socket.on('close', () => {
clients.delete(socket);
console.log(`client disconnected, ${clients.size} remaining`);
});
});
broadcast chat server complete: client Hoch message Hoch tlhap. open sockets Set "ya' Qoy" Hoch - polling pagh, timestamp comparison pagh, push neH.
reconnect SoH Qu', browser pagh
connection Qaw' (server restart, network blip, laptop sleep) WebSocket object reconnect pagh. explicit handle, exponential backoff (server Hoch clients lockstep hammer pagh).
function connectWithRetry(url, { onMessage }) {
let attempt = 0;
function connect() {
const socket = new WebSocket(url);
socket.addEventListener('open', () => {
attempt = 0; // reset backoff once we're actually connected
});
socket.addEventListener('message', onMessage);
socket.addEventListener('close', () => {
const delay = Math.min(1000 * 2 ** attempt, 30000);
attempt++;
setTimeout(connect, delay);
});
}
connect();
}
delays double (1s, 2s, 4s, 8s...) 30 seconds Dach, connection Qapla' vaj zero. production random jitter chel (clients law' same moments retry pagh).
WebSockets Qagh Doch
HTTP universal upgrade pagh. client server-initiated updates neH 'ej seconds latency Dach vaj Server-Sent Events (SSE) Dun - one-directional, auto reconnect, HTTP response. request-response neH vaj fetch Dun (caching, retries, HTTP semantics). WebSocket low-latency bidirectional vaD: chat, multiplayer, collaborative editing, live dashboards.