ProCodebaseProCodebase
  • ModusA Growth OS for your business, on WhatsAppKiosqSell more. Chase less.AI InterviewerAutomated screening & AI-led interviewsXperto AIAI prep companion for candidatesAI Tools HubResume builder, learning paths & more
  • Pre-Vetted DevelopersScreened, scored and ready to interviewAI-Native DevelopersSenior engineers on an hourly basis
  • Services
  • Features
  • AI Coaching
  • Jobs
  • FAQs
Sign inBook a demo
  • Services
  • Features
  • AI Coaching
  • Jobs
  • FAQs
Sign inBook a demo
ProCodebaseProCodebase

ProCodebase Technologies builds AI products for hiring and growth, and ships software for clients as a technical consultancy. We source, screen and deliver pre-vetted developers — so you only interview high-signal candidates.

Products

  • Modus
  • Kiosq
  • AI Interviewer
  • Xperto AI
  • AI Tools Hub

Hire & build

  • Pre-Vetted Developers
  • AI-Native Developers
  • Technical Consultancy
  • MVP Development
  • Features

Resources

  • Articles
  • Topics
  • Certifications
  • Collections
  • Jobs

Company

  • About Us
  • Contact Us
  • Book a Demo
  • FAQs

© 2026 ProCodebase Technologies. All rights reserved.

  • Privacy Policy
  • Terms & Conditions
  • Refund & Cancellation

Level Up Your Skills with Xperto-AI

A multi-AI agent platform that helps you level up your development skills and ace your interview preparation to secure your dream job.

Launch Xperto-AI

Building Real-time Applications with Socket.io in Node.js

author
Generated by
Abhishek Goyan

08/10/2024

node.js

Sign in to read full article

Introduction to Socket.io

In today's fast-paced digital world, real-time communication has become a crucial aspect of many web applications. Whether it's a chat app, live updates for sports scores, or collaborative editing tools, users expect instant interactions. This is where Socket.io comes into play.

Socket.io is a powerful library that enables real-time, bidirectional communication between web clients and servers. It's built on top of the WebSocket protocol and provides additional features like fallback options for older browsers and automatic reconnection.

Setting Up Socket.io in a Node.js Project

Let's start by setting up a basic Node.js project with Socket.io:

  1. Initialize a new Node.js project:

    npm init -y
    
  2. Install the required dependencies:

    npm install express socket.io
    
  3. Create a basic server file (server.js):

const express = require('express'); const app = express(); const http = require('http').createServer(app); const io = require('socket.io')(http); app.get('/', (req, res) => { res.sendFile(__dirname + '/index.html'); }); io.on('connection', (socket) => { console.log('A user connected'); socket.on('disconnect', () => { console.log('User disconnected'); }); }); http.listen(3000, () => { console.log('Server running on port 3000'); });
  1. Create a simple HTML file (index.html):
<!DOCTYPE html> <html> <head> <title>Socket.io Example</title> </head> <body> <h1>Welcome to Socket.io</h1> <script src="/socket.io/socket.io.js"></script> <script> const socket = io(); </script> </body> </html>

With this setup, you've created a basic Socket.io server and client connection.

Implementing Basic Features

Now that we have our setup, let's implement some basic features to showcase Socket.io's capabilities.

1. Sending Messages

Let's create a simple chat functionality:

Update server.js:

io.on('connection', (socket) => { console.log('A user connected'); socket.on('chat message', (msg) => { io.emit('chat message', msg); }); socket.on('disconnect', () => { console.log('User disconnected'); }); });

Update index.html:

<!DOCTYPE html> <html> <head> <title>Socket.io Chat Example</title> </head> <body> <ul id="messages"></ul> <form id="chat-form"> <input id="chat-input" type="text" autocomplete="off" /> <button>Send</button> </form> <script src="/socket.io/socket.io.js"></script> <script> const socket = io(); const form = document.getElementById('chat-form'); const input = document.getElementById('chat-input'); const messages = document.getElementById('messages'); form.addEventListener('submit', (e) => { e.preventDefault(); if (input.value) { socket.emit('chat message', input.value); input.value = ''; } }); socket.on('chat message', (msg) => { const li = document.createElement('li'); li.textContent = msg; messages.appendChild(li); }); </script> </body> </html>

This simple chat application demonstrates how easy it is to implement real-time communication using Socket.io.

2. Broadcasting

Socket.io makes it easy to broadcast messages to all connected clients or a specific group of clients. Let's modify our chat example to announce when a user joins or leaves:

Update server.js:

io.on('connection', (socket) => { console.log('A user connected'); io.emit('user status', 'A user joined the chat'); socket.on('chat message', (msg) => { io.emit('chat message', msg); }); socket.on('disconnect', () => { console.log('User disconnected'); io.emit('user status', 'A user left the chat'); }); });

Update index.html to handle the 'user status' event:

socket.on('user status', (msg) => { const li = document.createElement('li'); li.textContent = msg; li.style.fontStyle = 'italic'; messages.appendChild(li); });

Advanced Features and Best Practices

As your application grows, you'll want to leverage more advanced features of Socket.io and follow best practices for scalability and performance.

1. Rooms and Namespaces

Socket.io allows you to group sockets into rooms and namespaces, which is useful for creating separate channels or organizing your application logic.

Example of using rooms:

io.on('connection', (socket) => { socket.on('join room', (room) => { socket.join(room); io.to(room).emit('room message', `A user joined ${room}`); }); socket.on('chat message', (msg, room) => { io.to(room).emit('chat message', msg); }); });

2. Error Handling

Implement proper error handling to make your application more robust:

socket.on('chat message', (msg) => { try { // Process message io.emit('chat message', msg); } catch (error) { console.error('Error processing message:', error); socket.emit('error', 'Failed to process message'); } });

3. Authentication

For secure applications, implement authentication:

io.use((socket, next) => { if (socket.handshake.auth.token) { // Verify token // If valid, call next() // If invalid, call next(new Error("Invalid token")); } else { next(new Error("Authentication error")); } });

4. Scaling with Redis Adapter

For applications that need to scale across multiple servers, use the Redis adapter:

const redis = require('redis'); const { createAdapter } = require('@socket.io/redis-adapter'); const pubClient = redis.createClient({ host: 'localhost', port: 6379 }); const subClient = pubClient.duplicate(); io.adapter(createAdapter(pubClient, subClient));

Conclusion

Socket.io is a powerful tool for creating real-time applications in Node.js. By understanding its core concepts and advanced features, you can build responsive and scalable applications that provide seamless real-time interactions for your users.

Popular tags

node.jssocket.ioreal-time

Share now!

Like & bookmark

Related collections

  • Node.js Mastery: From Foundations to Frontiers

    08/10/2024 · NodeJS

  • Optimising Backend APIs - Node.js

    31/08/2024 · NodeJS

  • Build a CRUD App with Node.js, MongoDB, and TypeScript

    14/10/2024 · NodeJS

Related articles

  • Unleashing the Power of Serverless Node.js with AWS Lambda

    08/10/2024 · NodeJS

  • Leveraging TypeScript with Node.js

    08/10/2024 · NodeJS

  • Demystifying Docker and Node.js Containerization

    08/10/2024 · NodeJS

  • Decoding Authentication and Authorization in Node.js

    08/10/2024 · NodeJS

  • Unlocking the Power of Asynchronous Programming in Node.js

    08/10/2024 · NodeJS

  • Building Real-time Applications with Socket.io in Node.js

    08/10/2024 · NodeJS

  • Mastering Node.js Testing

    08/10/2024 · NodeJS

Popular category

  • Python
  • Generative AI
  • Machine Learning
  • ReactJS
  • System Design