The ws library helps you create a WebSocket server easily. It lets your server and clients talk in real-time, like a chat app.
ws library for WebSocket server in Node.js
import WebSocket, { WebSocketServer } from 'ws'; const wss = new WebSocketServer({ 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'); });
Use WebSocketServer to create the server on a port.
Listen for connection events to handle new clients.
const wss = new WebSocketServer({ port: 3000 });wss.on('connection', ws => { ws.send('Welcome!'); });
ws.on('message', message => { console.log('Client says:', message); });
This code creates a WebSocket server on port 8080. When a client connects, it logs a message and sends a greeting. When the client sends a message, the server logs it and replies back with confirmation.
import WebSocket, { WebSocketServer } from 'ws'; const wss = new WebSocketServer({ port: 8080 }); wss.on('connection', ws => { console.log('New client connected'); ws.on('message', message => { console.log(`Received from client: ${message}`); ws.send(`Server got your message: ${message}`); }); ws.send('Hello! You are connected to the server.'); });
Make sure the port you choose is open and not used by other apps.
Clients must use WebSocket protocol to connect (ws:// or wss://).
Use ws.send() to send messages to clients.
The ws library makes real-time communication easy.
Create a server with WebSocketServer and listen for connections.
Send and receive messages using ws.send() and message events.
Practice
ws library in Node.js?Solution
Step 1: Understand the role of
Thewswslibrary is designed specifically for WebSocket communication, enabling real-time data exchange between server and client.Step 2: Compare with other options
Options A, B, and C relate to other Node.js tasks like file uploads, HTTP routing, and database connections, which are not the focus ofws.Final Answer:
To create WebSocket servers and clients for real-time communication -> Option BQuick Check:
WebSocket library = real-time communication [OK]
- Confusing ws with HTTP or database libraries
- Thinking ws handles file uploads
- Assuming ws manages REST API routing
ws library?Solution
Step 1: Recall the correct constructor usage
Thewslibrary usesWebSocketServerconstructor with an options object, including the port number.Step 2: Check each option's syntax
const server = new WebSocketServer({ port: 8080 }); correctly usesnew WebSocketServer({ port: 8080 }). Options B, C, and D use incorrect constructors or methods not defined inws.Final Answer:
const server = new WebSocketServer({ port: 8080 }); -> Option AQuick Check:
Correct constructor syntax = const server = new WebSocketServer({ port: 8080 }); [OK]
- Using WebSocket instead of WebSocketServer for server creation
- Calling listen() method which does not exist
- Using non-existent ws.createServer() method
const { WebSocketServer } = require('ws');
const wss = new WebSocketServer({ port: 8080 });
wss.on('connection', ws => {
ws.on('message', message => {
console.log(`Received: ${message}`);
ws.send('Hi client');
});
});Solution
Step 1: Understand event handling
The server listens for 'connection' events, then listens for 'message' events on each connection. When a message arrives, it logs the message and sends a reply.Step 2: Trace the message flow
When client sends 'Hello', server logs 'Received: Hello' and sends 'Hi client' back to client.Final Answer:
Server logs 'Received: Hello' and sends 'Hi client' back -> Option DQuick Check:
Message event logs input and replies = Server logs 'Received: Hello' and sends 'Hi client' back [OK]
- Confusing message event with connection event
- Thinking server sends back the received message
- Assuming message event is invalid
const { WebSocketServer } = require('ws');
const wss = new WebSocketServer({ port: 3000 });
wss.on('connection', function(ws) {
ws.on('message', function(msg) {
ws.send(msg.toUpperCase);
});
});Solution
Step 1: Check method usage on message
The code usesmsg.toUpperCasewithout parentheses, so it passes the function itself instead of calling it.Step 2: Understand the impact
This causes a runtime error becausews.sendexpects a string or buffer, not a function reference.Final Answer:
Using msg.toUpperCase without parentheses causes a runtime error -> Option CQuick Check:
Method call missing () causes error = Using msg.toUpperCase without parentheses causes a runtime error [OK]
- Confusing event names 'connection' vs 'connect'
- Importing WebSocketServer from wrong package
- Thinking ws.send cannot send strings
ws library. Which code snippet correctly sends 'Hello all!' to every client connected to the server?const { WebSocketServer } = require('ws');
const wss = new WebSocketServer({ port: 8080 });
// Broadcast function here
function broadcast(message) {
// ???
}Solution
Step 1: Understand how to access clients
Thewss.clientsset contains all connected clients. We must iterate over it to send messages.Step 2: Check client connection state before sending
Only clients withreadyState === WebSocket.OPENcan receive messages safely.Step 3: Verify each option
wss.clients.forEach(client => { if (client.readyState === WebSocket.OPEN) client.send(message); }); correctly usesforEachand checksreadyState. wss.clients.map(client => client.send(message)); usesmapwhich is not appropriate here. Options A and D use non-existent methods.Final Answer:
wss.clients.forEach(client => { if (client.readyState === WebSocket.OPEN) client.send(message); }); -> Option AQuick Check:
Broadcast = forEach + readyState check [OK]
- Using map instead of forEach for side effects
- Calling non-existent broadcast or send on server
- Not checking client readyState before sending
Ready to prove it?
Pass the test and this pattern moves unknown
