Server-Sent Events (SSE) let a server send updates to a web page automatically. Sometimes, you need another way to do this, like WebSockets, which allow two-way communication between client and server.
Server-Sent Events alternative in Node.js
const WebSocket = require('ws'); const wss = new WebSocket.Server({ port: 8080 }); wss.on('connection', function connection(ws) { ws.on('message', function message(data) { console.log('received: %s', data); }); ws.send('Hello! Message from server.'); });
This example shows a simple WebSocket server in Node.js.
WebSocket allows messages to be sent both ways anytime, unlike SSE which is one-way from server to client.
const WebSocket = require('ws'); const wss = new WebSocket.Server({ port: 8080 }); wss.on('connection', ws => { ws.send('Welcome client!'); ws.on('message', message => { console.log(`Received: ${message}`); ws.send(`You said: ${message}`); }); });
const WebSocket = require('ws'); const wss = new WebSocket.Server({ port: 8080 }); wss.on('connection', ws => { setInterval(() => { ws.send(`Server time: ${new Date().toLocaleTimeString()}`); }, 1000); });
This complete WebSocket server listens on port 8080. When a client connects, it sends a greeting. It listens for messages from the client and replies back with confirmation. It also logs connection and disconnection events.
const WebSocket = require('ws'); const wss = new WebSocket.Server({ port: 8080 }); wss.on('connection', ws => { console.log('Client connected'); ws.send('Hello! You are connected to WebSocket server.'); ws.on('message', message => { console.log(`Received from client: ${message}`); ws.send(`Server received: ${message}`); }); ws.on('close', () => { console.log('Client disconnected'); }); });
WebSockets require both client and server support.
They work well for two-way real-time communication, unlike SSE which is one-way.
Use secure WebSocket (wss://) in production for encryption.
Server-Sent Events send updates only from server to client.
WebSockets allow two-way communication, making them a good alternative.
Use WebSockets when you need real-time, interactive communication.
Practice
Solution
Step 1: Understand SSE communication direction
Server-Sent Events send updates only from the server to the client, not the other way around.Step 2: Understand WebSocket communication direction
WebSockets allow full two-way communication between client and server, enabling interactive real-time data exchange.Final Answer:
SSE only allows server-to-client messages, while WebSockets allow two-way communication. -> Option AQuick Check:
Communication direction = A [OK]
- Thinking SSE supports two-way communication
- Confusing WebSocket speed with direction
- Assuming both are identical in communication
Solution
Step 1: Identify correct import and usage
The 'ws' library is imported as WebSocket, and the server is created with new WebSocket.Server({ port: 8080 }).Step 2: Check syntax correctness
The other options contain syntax errors, such as incorrect constructor arguments, non-existent methods like 'createServer', or invalid import styles.Final Answer:
const WebSocket = require('ws'); const server = new WebSocket.Server({ port: 8080 }); -> Option BQuick Check:
Correct WebSocket server syntax = C [OK]
- Using wrong class name or method
- Mixing import styles incorrectly
- Calling non-existent createServer method
const WebSocket = require('ws');
const server = new WebSocket.Server({ port: 8080 });
server.on('connection', socket => {
socket.on('message', message => {
console.log(`Received: ${message}`);
socket.send(`Echo: ${message}`);
});
});Solution
Step 1: Analyze message event handler
When the client sends 'Hello', the server logs 'Received: Hello' to the console.Step 2: Understand socket.send effect
The server sends back 'Echo: Hello' to the client, but this is not logged on the server console.Final Answer:
Received: Hello -> Option CQuick Check:
Server console logs message = B [OK]
- Confusing sent message with logged message
- Expecting client-side output on server console
- Ignoring event handler logic
const WebSocket = require('ws');
const server = new WebSocket.Server({ port: 8080 });
server.on('connection', socket => {
socket.on('message', (msg) => {
socket.send('Received: ' + message);
});
});Solution
Step 1: Check variable names in event handler
The message event handler uses parameter 'msg' but tries to send 'message', which is undefined.Step 2: Confirm other code parts
The port is correctly set, 'connection' event is spelled correctly, and async/sync is not an error here.Final Answer:
The variable 'message' is undefined inside the message event handler. -> Option DQuick Check:
Variable name mismatch = A [OK]
- Using wrong variable name inside callback
- Assuming port or event name errors
- Confusing async requirement for message handler
Solution
Step 1: Identify WebSocket capabilities
WebSockets allow two-way communication, so using the 'ws' library to listen for client messages fits the requirement.Step 2: Evaluate other options
The 'net', 'http', and 'express' with REST API options do not provide true two-way real-time communication; they rely on polling, REST calls, or low-level TCP unsuitable for replacing SSE with bidirectional messaging.Final Answer:
Use the 'ws' library to create a WebSocket server that listens for 'message' events from clients and broadcasts updates. -> Option AQuick Check:
Two-way real-time communication = D [OK]
- Using SSE for two-way communication
- Confusing HTTP REST with real-time sockets
- Using low-level TCP instead of WebSocket
Ready to prove it?
Pass the test and this pattern moves unknown
