Node.js WebSocket Example: A Comprehensive Guide

Node.js is a popular server-side platform that allows developers to build fast and scalable applications. One of the most powerful features of Node.js is its ability to handle real-time communication between clients and servers using WebSockets. In this article, we will explore Node.js WebSocket example and how you can use it to build real-time applications.

What are WebSockets?

WebSockets is a protocol that enables real-time communication between a client and a server over a single TCP connection. Unlike HTTP, which is request/response-based, WebSockets allow for bidirectional communication where the server can push data to the client without the client having to request it first.

WebSockets are ideal for building real-time applications such as chat applications, online gaming, and collaborative editing tools. With WebSockets, you can build applications that respond to user actions in real-time without the need to constantly poll the server for updates.

How to Use WebSockets in Node.js

Node.js has a built-in module for handling WebSockets called ‘ws’. This module provides a WebSocket server and client implementation that is easy to use and highly customizable.

Installing the ‘ws’ Module

The first step in using WebSockets in Node.js is to install the ‘ws’ module. You can do this by running the following command in your terminal:

npm install ws

Creating a WebSocket Server

To create a WebSocket server in Node.js, you need to create an instance of the ‘ws’ WebSocket.Server class and listen for incoming connections on a specific port:

const WebSocket = require('ws');

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

server.on('connection', (socket) => {console.log('Client connected');socket.on('message', (message) => {console.log(`Received message: ${message}`);});socket.send('Welcome to the WebSocket server!');});

In this example, we create a WebSocket server that listens on port 8080. When a client connects to the server, the ‘connection’ event is fired, and we log a message to the console.

We also listen for the ‘message’ event on the socket object, which is fired when the client sends a message to the server. When a message is received, we log it to the console and send a welcome message back to the client using the ‘send’ method.

Creating a WebSocket Client

To create a WebSocket client in Node.js, you need to create an instance of the ‘ws’ WebSocket class and connect to the server:

const WebSocket = require('ws');

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

socket.on('open', () => {console.log('Connected to server');socket.send('Hello, server!');});

socket.on('message', (message) => {console.log(`Received message: ${message}`);});

socket.on('close', () => {console.log('Disconnected from server');});

In this example, we create a WebSocket client that connects to the server running on localhost:8080. When the connection is established, the ‘open’ event is fired, and we log a message to the console.

We then send a message to the server using the ‘send’ method and listen for the ‘message’ event on the socket object. When a message is received, we log it to the console. Finally, we listen for the ‘close’ event, which is fired when the connection is closed.

WebSocket Example: Building a Real-Time Chat Application

Now that we understand how WebSockets work in Node.js, let’s build a real-time chat application using WebSockets.

Creating the Server

First, we need to create a WebSocket server that listens on a specific port and handles incoming connections:

const WebSocket = require('ws');

const server = new WebSocket.Server({ port: 8080 });const clients = new Set();

server.on('connection', (socket) => {console.log('Client connected');clients.add(socket);socket.on('message', (message) => {console.log(`Received message: ${message}`);for (const client of clients) {if (client !== socket) {client.send(message);}}});socket.on('close', () => {console.log('Client disconnected');clients.delete(socket);});});

In this example, we create a WebSocket server that listens on port 8080. We also create a Set to store the connected clients. When a client connects to the server, we add its socket object to the Set and log a message to the console.

When a client sends a message to the server, we log it to the console and broadcast it to all connected clients except the sender using a for loop that iterates over the Set of clients.

Finally, when a client disconnects from the server, we log a message to the console and remove its socket object from the Set.

Creating the Client

Next, we need to create a WebSocket client that connects to the server and sends messages:

const WebSocket = require('ws');

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

socket.on('open', () => {console.log('Connected to server');const username = prompt('Please enter your username:');socket.send(`User ${username} has joined the chat`);const form = document.getElementById('form');const input = document.getElementById('input');form.addEventListener('submit', (event) => {event.preventDefault();const message = input.value;socket.send(`${username}: ${message}`);input.value = '';});});

socket.on('message', (message) => {const chat = document.getElementById('chat');const line = document.createElement('div');line.innerText = message;chat.appendChild(line);});

socket.on('close', () => {console.log('Disconnected from server');});

In this example, we create a WebSocket client that connects to the server running on localhost:8080. When the connection is established, the ‘open’ event is fired, and we prompt the user to enter their username. We then send a message to the server announcing the user’s arrival in the chat.

We also listen for the ‘submit’ event on a form element and send the input value as a message to the server when the form is submitted. Finally, we listen for the ‘message’ event on the socket object and append the received message to a chat element in the HTML document.

Conclusion

In this article, we explored Node.js WebSocket example and how to use WebSockets to build real-time applications. We learned how to create a WebSocket server and client, and we built a real-time chat application using WebSockets.

WebSockets are a powerful tool for building real-time applications, and Node.js provides a simple and easy-to-use implementation of the WebSocket protocol. With WebSockets, you can build applications that respond to user actions in real-time and provide a seamless user experience.

FAQ

  1. What is Node.js?

    Node.js is a server-side platform built on top of Google’s V8 JavaScript engine. It allows developers to build fast and scalable applications using JavaScript, a language traditionally used for client-side development.

  2. What are WebSockets?

    WebSockets is a protocol that enables real-time communication between a client and a server over a single TCP connection. It allows for bidirectional communication and is ideal for building real-time applications such as chat applications and online gaming.

  3. What is the ‘ws’ module in Node.js?

    The ‘ws’ module is a built-in module in Node.js that provides a WebSocket server and client implementation. It is easy to use and highly customizable.

  4. What can I build with Node.js WebSockets?

    You can build a wide range of real-time applications using Node.js WebSockets, including chat applications, online gaming, collaborative editing tools, and more.

  5. Are there any alternatives to WebSockets?

    Yes, there are several alternatives to WebSockets, including long polling, server-sent events, and WebRTC. However, WebSockets are generally considered the most efficient and scalable option for real-time communication.