Heartbeats und Keep-Alives
Lernen Sie, Ping-/Pong-Frames und Heartbeats auf Anwendungsebene zu verwenden, um die Verbindungsbereitschaft aufrechtzuerhalten und nicht erreichbare Kommunikationspartner zu erkennen.
Heartbeats und Keep-Alives ist eine kostenlose WebSockets & Realtime Systems Programming-Lektion auf CoddyKit. Dies ist Lektion 3 von 4. Du kannst die komplette Lektion unten kostenlos lesen – dann übst du sie direkt im Browser mit einem integrierten Code-Editor und einem KI-Tutor rund um die Uhr. Sie ist Teil des WebSockets & Realtime Systems Programming-Lernpfads, und dein Fortschritt wird über Web und CoddyKit-App synchronisiert. Der WebSockets & Realtime Systems Programming-Kurs umfasst insgesamt 4 Lektionen.
Teile dieser Lektion wurden noch nicht übersetzt und werden auf Englisch angezeigt.
Why Heartbeats Matter
In realtime applications, maintaining an active and healthy connection is crucial. But what happens if a connection silently drops?
- Heartbeats are small, periodic messages exchanged between connected parties.
- They act as a 'pulse check' to confirm that both the client and server are still alive and responsive.
- This helps detect 'dead' connections that haven't properly closed, preventing resources from being tied up indefinitely.
The Silent Dead Peer
Imagine a client suddenly losing network connectivity (e.g., Wi-Fi drops, device sleeps) without gracefully closing its WebSocket connection.
- The server might still think the client is connected.
- Messages sent to this 'dead' client will never arrive.
- This wastes server resources and leads to inconsistent application states.
- Heartbeats provide a way to proactively identify and terminate these unresponsive connections.
Native WebSocket Pings
The WebSocket protocol includes built-in mechanisms for heartbeats: Ping and Pong frames.
- A server (or client) can send a special
Pingframe to its peer. - Upon receiving a
Ping, the peer is expected to automatically respond with aPongframe. - These frames are lightweight control messages, not application data.
- They confirm the underlying TCP connection is still active and can transmit data.
Server Sends Ping (Node.js)
Here's how a Node.js WebSocket server can send periodic ping frames to its connected clients. The ws library handles the low-level details.
const WebSocket = require('ws');
const wss = new WebSocket.Server({ port: 8080 });
wss.on('connection', ws => {
console.log('Client connected');
// Send a ping every 5 seconds
const pingInterval = setInterval(() => {
if (ws.readyState === WebSocket.OPEN) {
ws.ping();
console.log('Server sent ping.');
}
}, 5000);
ws.on('pong', () => {
console.log('Client responded with pong!');
});
ws.on('close', () => {
console.log('Client disconnected');
clearInterval(pingInterval);
});
ws.on('error', error => {
console.error('WS error:', error);
clearInterval(pingInterval);
});
});
console.log('Server running on ws://localhost:8080');Client Pongs Automatically
When a WebSocket client (like a browser or Node.js client using ws) receives a native Ping frame:
- It automatically sends back a
Pongframe without any explicit code from you. - This makes native pings very efficient for basic connection liveness checks.
- If a
Pingis sent and noPongis received within a timeout, the server can infer the connection is dead and close it.
Beyond Native Pings
While native Ping/Pong frames are great for TCP connection liveness, they have limitations:
- They don't check if the application layer is still responsive.
- Proxies or load balancers might sometimes interfere with or not forward these control frames correctly.
- They don't provide a way to carry custom data, like a timestamp or a user ID.
This is where application-level heartbeats come in.
App Heartbeat Scenarios
Application-level heartbeats are custom messages sent over the WebSocket connection, designed to be handled by your application logic. They are useful for:
- Detecting liveness through WebSocket-unaware proxies.
- Ensuring the application itself (not just the TCP connection) is responsive.
- Implementing more sophisticated timeouts based on user activity, not just network activity.
- Allowing custom data payloads (e.g., client status, last active time).
Client App Heartbeat (Node.js)
A client can send custom 'heartbeat' messages at regular intervals. This example uses a Node.js client, but browser clients would follow a similar pattern.
const WebSocket = require('ws');
const ws = new WebSocket('ws://localhost:8080');
let appHeartbeatInterval;
ws.onopen = () => {
console.log('Connected to server.');
// Send a custom heartbeat every 3 seconds
appHeartbeatInterval = setInterval(() => {
const message = JSON.stringify({
type: 'APP_HEARTBEAT',
timestamp: Date.now()
});
ws.send(message);
console.log('Client sent APP_HEARTBEAT.');
}, 3000);
};
ws.onmessage = event => {
console.log('Received:', event.data);
};
ws.onclose = () => {
console.log('Disconnected.');
clearInterval(appHeartbeatInterval);
};
ws.onerror = error => {
console.error('WS error:', error);
clearInterval(appHeartbeatInterval);
};Server Tracks App Heartbeats
The server receives these custom messages and updates a 'last seen' timestamp for each client. If a client's timestamp isn't updated for too long, the server can close the connection.
const WebSocket = require('ws');
const wss = new WebSocket.Server({ port: 8080 });
wss.on('connection', ws => {
console.log('Client connected');
ws.lastAppHeartbeat = Date.now(); // Initialize timestamp
const checkInterval = setInterval(() => {
// If no app heartbeat in 6 seconds, assume dead
if (Date.now() - ws.lastAppHeartbeat > 6000) {
console.log('Client unresponsive (app heartbeat). Terminating.');
ws.terminate(); // Force close the connection
clearInterval(checkInterval);
}
}, 2000); // Check every 2 seconds
ws.on('message', message => {
const parsed = JSON.parse(message);
if (parsed.type === 'APP_HEARTBEAT') {
ws.lastAppHeartbeat = Date.now(); // Update timestamp
// console.log('Received custom APP_HEARTBEAT from client');
}
// Handle other messages...
});
ws.on('close', () => {
console.log('Client disconnected');
clearInterval(checkInterval);
});
ws.on('error', error => {
console.error('WS error:', error);
clearInterval(checkInterval);
});
});
console.log('Server running on ws://localhost:8080');Check Your Understanding
Select all statements that accurately describe WebSocket heartbeats and keep-alives:
Lesson Summary
We've explored the critical role of heartbeats in maintaining robust WebSocket connections:
- Native Ping/Pong frames check TCP connection liveness, with clients responding automatically.
- Application-level heartbeats provide a more robust and customizable way to ensure the application itself is responsive, especially useful with proxies.
- Both methods prevent 'dead' connections from consuming resources and improve overall system resilience.
Mastering heartbeats is essential for building stable and scalable realtime applications.
Lerne WebSockets & Realtime Systems Programming mit einem KI-Tutor — kostenlos
Schreibe und führe echten Code in deinem Browser aus, bekomme sofortige Hilfe von einem 24/7 KI-Tutor und setze dein Lernen im Web oder in der App fort.
- Kurse
- 12
- Lektionen
- 47
Häufig gestellte Fragen
Ist die Lektion „Heartbeats und Keep-Alives“ kostenlos?
Ja — der vollständige Text von „Heartbeats und Keep-Alives“ ist hier im Web kostenlos zu lesen. Um sie interaktiv zu üben (integrierter Code-Editor und 24/7 KI-Tutor) und den Rest des WebSockets & Realtime Systems Programming-Kurses freizuschalten, upgrade auf CoddyKit PRO. Der WebSockets & Realtime Systems Programming-Kurs umfasst insgesamt 4 Lektionen.
Was lerne ich in „Heartbeats und Keep-Alives“?
Lernen Sie, Ping-/Pong-Frames und Heartbeats auf Anwendungsebene zu verwenden, um die Verbindungsbereitschaft aufrechtzuerhalten und nicht erreichbare Kommunikationspartner zu erkennen. Du übst WebSockets & Realtime Systems Programming mit praktischem Code, den du direkt im Browser ausführst, und ein 24/7 KI-Tutor beantwortet deine Fragen während du die Lektion bearbeitest.
Brauche ich Erfahrung, um WebSockets & Realtime Systems Programming zu starten?
Keine Vorkenntnisse erforderlich. WebSockets & Realtime Systems Programming auf CoddyKit ist für Anfänger bis fortgeschrittene Lernende strukturiert, sodass du hier starten oder von Anfang an beginnen und in deinem eigenen Tempo voranschreiten kannst. Dies ist Lektion 3 von 4.
Wie lange dauert die Lektion „Heartbeats und Keep-Alives“?
Die meisten CoddyKit-Lektionen dauern etwa 5–10 Minuten. Jede ist kompakt und interaktiv, sodass du stetig Fortschritte machst und genau dort weitermachst, wo du aufgehört hast – im Web und in der App.
Kann ich in dieser WebSockets & Realtime Systems Programming-Lektion Code schreiben und ausführen?
Ja. Jede WebSockets & Realtime Systems Programming-Lektion enthält einen integrierten Code-Editor, sodass du echten Code direkt in deinem Browser schreibst und ausführst und sofort KI-Feedback erhältst — ohne lokale Einrichtung erforderlich.
Alle Lektionen in diesem Kurs
- Verbindungen und Wiederverbindungen verwalten
- Robuste Fehlerweitergabe und Wiederherstellung
- Heartbeats und Keep-Alives
- Nachrichtenbestätigung und Zustellungsgarantien