How to build a real-time chat app with websocket

April 11, 2025
3 min read
By Cojocaru David & ChatGPT

Table of Contents

This is a list of all the sections in this post. Click on any of them to jump to that section.

index

How to Build a Real-Time Chat App with WebSocket: A Step-by-Step Guide

Want to build a real-time chat app with WebSocket? This step-by-step guide will show you how to create a fast, interactive chat application using WebSocket technology. Unlike traditional HTTP, WebSocket provides a persistent, bidirectional connection, enabling instant messaging without page refreshes. By the end, you’ll have a fully functional chat app—ready to deploy or extend with advanced features.

Why Use WebSockets for Real-Time Chat?

WebSockets are the gold standard for real-time applications because they eliminate latency and reduce server load. Here’s why they’re perfect for chat apps:

  • Instant Messaging: Messages are delivered in real-time with no delay.
  • Efficient Connection: Maintains a single, persistent connection instead of repeated HTTP requests.
  • Two-Way Communication: Both server and client can send data anytime.
  • Scalability: Handles multiple users with minimal overhead.

Prerequisites

Before diving in, ensure you have:

  • Basic JavaScript/Node.js knowledge
  • A code editor (VS Code recommended)
  • Node.js and npm/yarn installed
  • A modern browser (Chrome, Firefox, or Safari)

Step 1: Set Up the WebSocket Server (Backend)

The backend handles WebSocket connections and broadcasts messages. We’ll use Node.js with the lightweight ws library.

  1. Initialize a Node.js project:

    npm init -y  
    npm install ws  
  2. Create server.js and add this code:

    const WebSocket = require("ws");  
    const wss = new WebSocket.Server({ port: 8080 });  
     
    wss.on("connection", (ws) => {  
      console.log("Client connected");  
     
      ws.on("message", (message) => {  
        wss.clients.forEach((client) => {  
          if (client !== ws && client.readyState === WebSocket.OPEN) {  
            client.send(message);  
          }  
        });  
      });  
     
      ws.on("close", () => console.log("Client disconnected"));  
    });  
     
    console.log("Server running on ws://localhost:8080");  

Run the server with node server.js.

Step 2: Build the Frontend Chat Interface

Create an index.html file with a simple UI:

<!DOCTYPE html>  
<html>  
  <head>  
    <title>WebSocket Chat</title>  
    <style>  
      #messages { height: 200px; overflow-y: scroll; border: 1px solid #ddd; }  
    </style>  
  </head>  
  <body>  
    <h1>Real-Time Chat</h1>  
    <div id="messages"></div>  
    <input id="messageInput" placeholder="Type here..." />  
    <button onclick="sendMessage()">Send</button>  
 
    <script>  
      const ws = new WebSocket("ws://localhost:8080");  
      const messagesDiv = document.getElementById("messages");  
 
      ws.onmessage = (event) => {  
        messagesDiv.innerHTML += `<div>${event.data}</div>`;  
        messagesDiv.scrollTop = messagesDiv.scrollHeight;  
      };  
 
      function sendMessage() {  
        const input = document.getElementById("messageInput");  
        ws.send(input.value);  
        input.value = "";  
      }  
    </script>  
  </body>  
</html>  

Open the file in a browser to test the chat.

Step 3: Enhance Your Chat App

Level up your app with these features:

  • User Authentication: Add usernames to identify senders.
  • Message History: Store chats in a database (e.g., MongoDB).
  • Emoji Support: Use libraries like emoji-picker-element.
  • Private Messaging: Filter messages by recipient.
  • Chat Rooms: Implement channels for group chats.

Step 4: Deploy Your App

Host your chat app on platforms supporting WebSockets:

  • Heroku (PaaS with WebSocket support)
  • AWS EC2 (Full server control)
  • Render (Easy Git-based deploys)

Ensure your provider allows persistent WebSocket connections.

“Real-time communication is no longer a luxury; it’s an expectation. WebSockets empower you to meet that demand effortlessly.”

#WebSocket #RealTimeChat #NodeJS #WebDevelopment #Tutorial