WebSockets in Express.js and Node.js enable real-time, two-way communication between a website and its server. This allows for features like live chat, instant updates, and interactive experiences.
- WebSockets maintain a persistent connection, unlike typical web requests.
- Libraries such as ws and socket.io simplify the integration of WebSockets into Node.js and Express.js applications.
Why use WebSockets?
Here are the reasons why WebSockets are a great choice for certain applications:
- Real-time updates: See changes instantly, like in a live game or chat.
- Two-way communication: Both the website and the server can send messages at any time.
- Faster than usual: No waiting for the website to "call" the server every time.
How WebSockets Work in Node.js?
WebSockets provide a persistent, two-way communication channel between a client (like a web browser) and a server (like a Node.js server). This allows for real-time data exchange without the overhead of repeatedly establishing connections, which is how traditional HTTP requests work.
- Handshake: The client and server initially establish a WebSocket connection through an HTTP handshake. This "upgrades" the connection to a WebSocket.
- Persistent Connection: Unlike HTTP, the WebSocket connection remains open, allowing for continuous communication.
- Bidirectional Communication: Both the client and the server can send data to each other at any time.
- Real-time Data Exchange: Data is pushed instantly, without the need for the client to repeatedly request updates.
- Event-driven Model: socket.io (a popular WebSocket library) uses an event-driven model to manage communication, making it easy to handle messages and other events.
Approach to Implement Web Sockets
Web sockets can be implemented in the following ways:
1. Server-Side (Node.js):
Here's the approach and what each step does:
- Require Modules: Bring in the necessary tools: express (for creating the server), socket.io (for WebSockets), and http (for handling web requests).
- Create HTTP Server: Set up the basic structure of a web server using express and http. This is where your website files will be served from.
- WebSocket Connection: Use socket.io to create the "always-on" connection. This is the key part that makes WebSockets work.
- Handle Connections: When a user visits your website, this code handles that connection. You can send a welcome message, listen for messages from the user, and manage what happens when they leave.
2. Client-Side (HTML/JavaScript):
Here's what you need on the website itself:
- HTML Form: Create a simple form with an input field for typing messages and a button to send them.
- Include Socket.IO: Add the socket.io library to your HTML file. This allows your website to talk to the server using WebSockets. You'll typically include it with a <script> tag.
- Establish Connection: When the webpage loads, connect to the WebSocket server.
- Handle Messages: Set up listeners to receive messages from the server and display them on the page.
- Send Messages: When the user submits the form, send the message to the server using the WebSocket connection.
- Handle Disconnections: Manage what happens when the connection between the website and server is lost.
Communication Flow:
- Connection: User visits the website, establishing a WebSocket connection.
- Welcome: The server sends a "welcome" message to the user.
- User Input: The user types a message and clicks "Send."
- Message Sent: The website sends the message to the server via the WebSocket.
- Server Receives: The server receives the message.
- Broadcast (Optional): The server can then send the message to other connected users (like in a chat app).
- Display: The website displays the message.
- Disconnection: User leaves the website, closing the WebSocket connection.
Implementing WebSockets in Node.js
Here's a step-by-step guide to adding WebSockets to your Node.js application:
1. Server-Side (Node.js)
This part handles the WebSocket connection and manages communication between the server and the clients (browsers).
Installation:
First, you need to install the necessary packages. Open your terminal in your project directory and run:
npm install express socket.io
This installs express (for creating the server) and socket.io (for handling WebSockets).
JavaScript
const express = require('express');
const http = require('http');
const socketIO = require('socket.io');
const app = express();
const server = http.createServer(app);
const io = socketIO(server); // Initialize socket.io
const port = process.env.PORT || 3000;
app.get("/", (req, res) => {
res.sendFile(__dirname + "/client.html"); // Serve the HTML file
});
io.on('connection', (socket) => {
console.log('New user connected');
socket.emit('newMessage', { from: 'Server', text: 'Welcome!', createdAt: Date.now() });
socket.on('createMessage', (message) => {
console.log('New message:', message);
io.emit('newMessage', message); // Send to everyone
});
socket.on('disconnect', () => {
console.log('User disconnected');
});
});
server.listen(port, () => {
console.log(`Server is up on port ${port}`);
});
- Sets up a web server using Express.js and enables WebSocket communication with Socket.io.
- Handles new user connections, sending a welcome message and listening for incoming messages. These incoming messages are then broadcast to all connected users.
- Manages user disconnections.
Output

2. Setting up the Client (HTML/JavaScript)
This part runs in the user's web browser and lets them talk to the server. We're using basic HTML and JavaScript here, but you could also use other tools like React or Angular to build the client-side of your application.
HTML (client.html):
HTML
<html>
<head></head>
<body>
<form id="message-form">
<input type="text" id="message-input" placeholder="Enter message" autocomplete="off">
<button type="submit">Send</button>
</form>
<ul id="messages"></ul>
<script src="/socket.io/socket.io.js"></script>
<script>
const socket = io();
socket.on('connect', () => {
console.log('Connected to server');
});
socket.on('newMessage', (message) => {
const li = document.createElement('li');
li.textContent = `${message.from}: ${message.text}`;
document.getElementById('messages').appendChild(li);
});
document.getElementById('message-form').addEventListener('submit', (e) => {
e.preventDefault();
const message = document.getElementById('message-input').value;
socket.emit('createMessage', {
from: 'User',
text: message,
createdAt: Date.now()
});
document.getElementById('message-input').value = '';
});
socket.on('disconnect', () => {
console.log('Disconnected from server');
});
</script>
</body>
</html>
- Includes the Socket.io client library to enable WebSocket communication with the server.
- Establishes a connection with the server and listens for incoming messages, displaying them in the browser.
- Sends messages to the server when the user submits the form.
Output

Similar Reads
REST API Introduction REST API stands for REpresentational State Transfer API. It is a type of API (Application Programming Interface) that allows communication between different systems over the internet. REST APIs work by sending requests and receiving responses, typically in JSON format, between the client and server.
7 min read
NodeJS Interview Questions and Answers NodeJS is one of the most popular runtime environments, known for its efficiency, scalability, and ability to handle asynchronous operations. It is built on Chromeâs V8 JavaScript engine for executing JavaScript code outside of a browser. It is extensively used by top companies such as LinkedIn, Net
15+ min read
How to Install PIP on Windows PIP stands for "Preferred Installer Program" or "Pip Installs Packages" and is a standard package manager for Python that enables users to install and manage additional libraries and dependencies not included in the standard Python library. To use PIP, you must install Python on your Windows machine
6 min read
A* Search Algorithm Motivation To approximate the shortest path in real-life situations, like- in maps, games where there can be many hindrances.We can consider a 2D Grid having several obstacles and we start from a source cell (colored red below) to reach towards a goal cell (colored green below)What is A* Search Algo
15+ min read
Node.js Tutorial Node.js is a powerful, open-source, and cross-platform JavaScript runtime environment built on Chrome's V8 engine. It allows you to run JavaScript code outside the browser, making it ideal for building scalable server-side and networking applications.JavaScript was mainly used for frontend developme
4 min read
Architecture of 8085 microprocessor A microprocessor is fabricated on a single integrated circuit (IC) or chip that is used as a central processing unit (CPU).The 8085 microprocessor is an 8-bit microprocessor that was developed by Intel in the mid-1970s. It was widely used in the early days of personal computing and was a popular cho
11 min read
Introduction to Disjoint Set (Union-Find Algorithm) Two sets are called disjoint sets if they don't have any element in common. The disjoint set data structure is used to store such sets. It supports following operations:Merging two disjoint sets to a single set using Union operation.Finding representative of a disjoint set using Find operation.Check
15+ min read
JSON Web Token (JWT) A JSON Web Token (JWT) is a standard used to securely transmit information between a client (like a frontend application) and a server (the backend). It is commonly used to verify users' identities, authenticate them, and ensure safe communication between the two. JWTs are mainly used in web apps an
7 min read
States of a Process in Operating Systems In an operating system, a process is a program that is being executed. During its execution, a process goes through different states. Understanding these states helps us see how the operating system manages processes, ensuring that the computer runs efficiently. Please refer Process in Operating Sys
11 min read
Express.js Tutorial Express.js is a minimal and flexible Node.js web application framework that provides a list of features for building web and mobile applications easily. It simplifies the development of server-side applications by offering an easy-to-use API for routing, middleware, and HTTP utilities.Built on Node.
4 min read