WebSockets for real-time communication in Computer Networks - Time & Space Complexity
When using WebSockets for real-time communication, it is important to understand how the time taken to send and receive messages changes as more messages or users are involved.
We want to know how the system handles increasing communication load efficiently.
Analyze the time complexity of this simplified WebSocket server handling messages.
// Pseudocode for WebSocket message broadcast
function onMessageReceived(message) {
for (let client of connectedClients) {
client.send(message);
}
}
This code sends a received message to all connected clients, broadcasting it in real-time.
Look at what repeats when a message arrives.
- Primary operation: Sending the message to each connected client.
- How many times: Once for every client connected to the server.
As the number of clients grows, the number of send operations grows too.
| Input Size (n) | Approx. Operations |
|---|---|
| 10 clients | 10 sends |
| 100 clients | 100 sends |
| 1000 clients | 1000 sends |
Pattern observation: The work grows directly with the number of clients; doubling clients doubles the work.
Time Complexity: O(n)
This means the time to broadcast a message grows linearly with the number of connected clients.
[X] Wrong: "Sending a message to all clients takes the same time no matter how many clients there are."
[OK] Correct: Each client needs its own send operation, so more clients mean more work and more time.
Understanding how message broadcasting scales helps you design systems that handle many users smoothly, a key skill in real-time communication roles.
What if the server only sent messages to a fixed number of clients instead of all? How would the time complexity change?
Practice
WebSockets for communication between a client and a server?Solution
Step 1: Understand WebSocket communication
WebSockets keep a single connection open for continuous two-way data exchange.Step 2: Compare with other methods
Unlike HTTP requests, WebSockets avoid opening new connections for each message.Final Answer:
They allow real-time, two-way communication without repeatedly opening new connections. -> Option BQuick Check:
Two-way real-time communication = They allow real-time, two-way communication without repeatedly opening new connections. [OK]
- Thinking WebSockets only send data one way
- Confusing WebSockets with HTTP polling
- Assuming new connection per message
Solution
Step 1: Identify correct WebSocket URL scheme
WebSocket URLs start withws://orwss://for secure connections.Step 2: Check JavaScript syntax
The correct syntax usesnew WebSocket(url)with thews://scheme.Final Answer:
const socket = new WebSocket('ws://example.com'); -> Option DQuick Check:
WebSocket URL starts with ws:// = const socket = new WebSocket('ws://example.com'); [OK]
- Using http:// or https:// instead of ws://
- Calling WebSocket without new keyword
- Using incorrect method like WebSocket.connect
const socket = new WebSocket('ws://example.com');
socket.onopen = () => socket.send('Hello');
socket.onmessage = (event) => console.log(event.data);What will happen when the connection opens?
Solution
Step 1: Analyze the
When the WebSocket connection opens, it sends the string 'Hello' to the server.onopenevent handlerStep 2: Analyze the
Any message received from the server is logged to the console.onmessageevent handlerFinal Answer:
The message 'Hello' is sent to the server, and incoming messages are logged. -> Option AQuick Check:
Send on open + log messages = The message 'Hello' is sent to the server, and incoming messages are logged. [OK]
- Thinking send cannot be called on open
- Confusing logging sent message vs received message
- Assuming no action until server sends first
const socket = new WebSocket('ws://example.com');
socket.send('Hi');What is the problem with this code?
Solution
Step 1: Check WebSocket connection timing
Thesendmethod must be called only after the connection is open.Step 2: Identify error in code
Callingsendimmediately after creating the socket tries to send before connection is ready, causing an error.Final Answer:
Thesendmethod is called before the connection is open. -> Option AQuick Check:
send before open causes error = Thesendmethod is called before the connection is open. [OK]
- Using https:// instead of ws:// for WebSocket URL
- Expecting constructor to take a callback
- Sending non-string data without serialization
Solution
Step 1: Understand real-time update needs
A live dashboard needs instant updates without delay or repeated connection overhead.Step 2: Evaluate options for efficiency
Opening one WebSocket connection and receiving updates as messages is efficient and real-time.Step 3: Eliminate less efficient methods
Polling causes delay and overhead; opening many connections wastes resources; sending once misses updates.Final Answer:
Open a WebSocket connection once and update scores as messages arrive. -> Option CQuick Check:
Single open connection + live updates = Open a WebSocket connection once and update scores as messages arrive. [OK]
- Using polling instead of WebSocket for real-time
- Opening multiple connections unnecessarily
- Not updating after initial data load
Ready to prove it?
Pass the test and this pattern moves unknown
