0Pricing
WebSockets & Realtime Systems Programming · Lekcja

Testowanie wydajności WebSocket

Użyj narzędzi i technik do pomiaru wydajności, opóźnień i przepustowości serwerów WebSocket.

Testowanie wydajności WebSocket to bezpłatna lekcja WebSockets & Realtime Systems Programming na CoddyKit. To lekcja 1 z 4. Możesz przeczytać całą lekcję poniżej za darmo — a potem ćwiczyć ją interaktywnie w przeglądarce z wbudowanym edytorem kodu i tutorem AI dostępnym 24/7. To część ścieżki edukacyjnej WebSockets & Realtime Systems Programming, a Twój postęp synchronizuje się między webem a aplikacją CoddyKit. Kurs WebSockets & Realtime Systems Programming zawiera 4 lekcji w sumie.

Części tej lekcji nie zostały jeszcze przetłumaczone i są wyświetlane po angielsku.

Why Benchmark WebSockets?

When building realtime applications with WebSockets, performance is key. Benchmarking helps us understand how our server behaves under different loads.

It's like stress-testing your system before it goes live. You want to know its limits, identify bottlenecks, and ensure it can handle the expected user traffic without breaking a sweat.

  • Capacity Planning: How many users can your server handle?
  • Performance Tuning: Identify slow parts of your code.
  • Regression Testing: Ensure new changes don't degrade performance.

Key WebSocket Metrics

To evaluate performance, we look at specific metrics:

  • Latency: The time it takes for a message to travel from client to server and back (Round-Trip Time). Lower is better.
  • Throughput: The number of messages or bytes processed per second. Higher is better.
  • Concurrency: The maximum number of simultaneous active connections or clients the server can handle. Higher is better.
  • Error Rate: The percentage of failed operations. Lower is better.

Tools for Benchmarking

Several tools can help you benchmark WebSocket applications. These range from simple scripts to dedicated load testing platforms.

  • Custom Scripts: Using libraries like ws (Node.js) to write your own client simulators.
  • Load Testing Tools: Tools like Apache JMeter, k6 (Grafana Labs), or Gatling can simulate thousands of concurrent users and connections.
  • Monitoring Tools: Often integrated with benchmarking to observe server resource usage (CPU, Memory) during tests.

Simple Echo WebSocket Server

Before we can benchmark, we need a WebSocket server to test against. Here's a basic Node.js "echo" server that sends back whatever it receives.

Save this as server.js and run with node server.js (ensure ws is installed: npm install ws).

const WebSocket = require('ws');

const wss = new WebSocket.Server({ port: 8080 });

wss.on('connection', ws => {
  console.log('Client connected');
  ws.on('message', message => {
    // Echo back the received message
    ws.send(message.toString());
  });
  ws.on('close', () => console.log('Client disconnected'));
  ws.on('error', error => console.error('WS Error:', error));
});

console.log('WebSocket server started on port 8080');

Creating a Single Test Client

Now, let's create a client that connects to our echo server, sends a message, and receives it back. This forms the basis for our performance tests.

Save this as client.js and run with node client.js after starting the server.

const WebSocket = require('ws');

const ws = new WebSocket('ws://localhost:8080');

ws.onopen = () => {
  console.log('Connected to server');
  ws.send('Hello WebSocket!');
};

ws.onmessage = event => {
  console.log('Received:', event.data);
  ws.close(); // Close after receiving the echo
};

ws.onerror = error => console.error('WS Error:', error.message);
ws.onclose = () => console.log('Disconnected');

Simulating Multiple Clients

Benchmarking requires simulating many concurrent clients. We can modify our client script to create multiple WebSocket connections.

Each client will connect, send a message, and measure its own performance. Aggregating these results gives us a system-wide view.

  • Use a loop to create many WebSocket instances.
  • Manage connection states and message counts for each client.
  • Collect performance data (e.g., latency) from each client.

Measuring Message Latency

To measure latency, the client sends a message containing a timestamp. When the server echoes it back, the client calculates the time difference.

This example extends our client to measure the round-trip time for a single message.

const WebSocket = require('ws');

const ws = new WebSocket('ws://localhost:8080');
let startTime;

ws.onopen = () => {
  console.log('Connected for latency test');
  startTime = Date.now();
  ws.send(JSON.stringify({ timestamp: startTime, msg: 'Ping' }));
};

ws.onmessage = event => {
  const endTime = Date.now();
  const data = JSON.parse(event.data);
  const latency = endTime - data.timestamp;
  console.log(`Received echo: ${data.msg}. Latency: ${latency} ms`);
  ws.close();
};

ws.onerror = error => console.error('WS Error:', error.message);
ws.onclose = () => console.log('Latency test finished');

Measuring Message Throughput

Throughput is often measured as messages per second. A client can continuously send messages and count how many responses it receives within a set timeframe.

This script sends 1000 messages and reports the total time and messages per second.

const WebSocket = require('ws');

const ws = new WebSocket('ws://localhost:8080');
const totalMessages = 1000;
let messagesReceived = 0;
let testStartTime;

ws.onopen = () => {
  console.log('Connected for throughput test');
  testStartTime = Date.now();
  for (let i = 0; i < totalMessages; i++) {
    ws.send(`Message ${i}`);
  }
};

ws.onmessage = event => {
  messagesReceived++;
  if (messagesReceived === totalMessages) {
    const endTime = Date.now();
    const duration = (endTime - testStartTime) / 1000; // seconds
    const throughput = totalMessages / duration;
    console.log(`Received ${totalMessages} messages in ${duration.toFixed(2)}s.`);
    console.log(`Throughput: ${throughput.toFixed(2)} messages/second.`);
    ws.close();
  }
};

ws.onerror = error => console.error('WS Error:', error.message);
ws.onclose = () => console.log('Throughput test finished');

Interpreting Your Results

Raw numbers from benchmarking are just the start. The real value comes from interpreting them in context:

  • Compare to Baselines: How do your current results compare to previous tests or expected performance?
  • Look for Trends: Does latency increase drastically with more concurrent users? Does throughput plateau?
  • Identify Bottlenecks: High CPU usage on the server, network saturation, or database contention are common culprits.
  • Iterate and Improve: Use the data to make changes, then re-benchmark to see the impact.

Quick Check on Metrics

You're testing a WebSocket server and observe that as more clients connect, the time it takes for a message to be sent and received back increases significantly. Which performance metric is primarily degrading?

Recap: Benchmarking WebSockets

In this lesson, we explored the importance of benchmarking WebSocket applications. We learned about key metrics like latency, throughput, and concurrency.

You saw how to set up a simple echo server and write client-side scripts to measure these metrics. Interpreting these results is crucial for optimizing your realtime systems and ensuring they can handle production loads.

Często zadawane pytania

Czy lekcja „Testowanie wydajności WebSocket” jest bezpłatna?

Tak — pełny tekst „Testowanie wydajności WebSocket” jest dostępny za darmo tutaj w sieci. Aby ćwiczyć ją interaktywnie (wbudowany edytor kodu i tutor AI dostępny 24/7) i odblokować resztę kursu WebSockets & Realtime Systems Programming, przejdź na CoddyKit PRO. Kurs WebSockets & Realtime Systems Programming zawiera 4 lekcji w sumie.

Co nauczysz się w „Testowanie wydajności WebSocket”?

Użyj narzędzi i technik do pomiaru wydajności, opóźnień i przepustowości serwerów WebSocket. Ćwiczysz WebSockets & Realtime Systems Programming z praktycznym kodem, który uruchamiasz bezpośrednio w przeglądarce, a tutor AI dostępny 24/7 odpowiada na Twoje pytania podczas pracy nad lekcją.

Czy potrzebuję doświadczenia, aby zacząć WebSockets & Realtime Systems Programming?

Nie wymagamy żadnego doświadczenia. WebSockets & Realtime Systems Programming w CoddyKit jest strukturyzowany dla początkujących i zaawansowanych użytkowników, więc możesz zacząć tutaj lub od początku i uczyć się w swoim tempie. To lekcja 1 z 4.

Ile czasu zajmuje lekcja „Testowanie wydajności WebSocket”?

Większość lekcji CoddyKit trwa około 5–10 minut. Każda lekcja to mały, interaktywny krok, dzięki czemu robisz systematyczne postępy i zawsze wracasz dokładnie do tego samego miejsca — na webie i w aplikacji.

Czy mogę pisać i uruchamiać kod w tej lekcji WebSockets & Realtime Systems Programming?

Tak. Każda lekcja WebSockets & Realtime Systems Programming zawiera wbudowany edytor kodu, więc piszesz i uruchamiasz prawdziwy kod bezpośrednio w przeglądarce i od razu otrzymujesz sprzężenie zwrotne od AI — bez konfiguracji na komputerze.

Wszystkie lekcje w tym kursie

  1. Testowanie wydajności WebSocket
  2. Profilowanie i debugowanie problemów czasu rzeczywistego
  3. Monitorowanie i alerty w czasie rzeczywistym
  4. Testy obciążeniowe i planowanie wydajności WebSockets
← Powrót do WebSockets & Realtime Systems Programming