Socket.io Framework
Master Socket.io for building robust real-time applications with rooms, namespaces, and middleware. This is a foundational concept in server-side JavaScript development that professional developers rely on daily. The explanations below are written to be beginner-friendly while covering the depth and nuance that comes from real-world Node.js experience. Take your time with each section and practice the examples
75 min•By Priygop Team•Last updated: Feb 2026
What is Socket.io?
Socket.io is a JavaScript library that enables real-time, bidirectional communication between web clients and servers. It provides additional features like automatic reconnection, room management, and cross-browser compatibility.
Socket.io Server Setup
Example
// Install Socket.io
npm install socket.io
// Socket.io server with Express
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, {
cors: {
origin: "http://localhost:3000",
methods: ["GET", "POST"]
}
});
// Connection handling
io.on('connection', (socket) => {
console.log('User connected:', socket.id);
// Join a room
socket.on('join-room', (roomName) => {
socket.join(roomName);
socket.to(roomName).emit('user-joined', {
userId: socket.id,
message: 'A new user joined the room'
});
console.log(`User ${socket.id} joined room: ${roomName}`);
});
// Handle chat messages
socket.on('send-message', (data) => {
socket.to(data.room).emit('receive-message', {
userId: socket.id,
message: data.message,
timestamp: new Date().toISOString()
});
});
// Handle typing indicators
socket.on('typing', (data) => {
socket.to(data.room).emit('user-typing', {
userId: socket.id,
isTyping: true
});
});
socket.on('stop-typing', (data) => {
socket.to(data.room).emit('user-typing', {
userId: socket.id,
isTyping: false
});
});
// Handle disconnection
socket.on('disconnect', () => {
console.log('User disconnected:', socket.id);
});
});
// Middleware for authentication
io.use((socket, next) => {
const token = socket.handshake.auth.token;
if (token) {
// Verify token here
socket.userId = 'user-' + Math.random();
next();
} else {
next(new Error('Authentication error'));
}
});
server.listen(3001, () => {
console.log('Socket.io server running on port 3001');
});Socket.io Client Implementation
Example
// Socket.io client
import { io } from 'socket.io-client';
const socket = io('http://localhost:3001', {
auth: {
token: 'your-auth-token'
}
});
// Connection events
socket.on('connect', () => {
console.log('Connected to server');
console.log('Socket ID:', socket.id);
});
socket.on('disconnect', () => {
console.log('Disconnected from server');
});
socket.on('connect_error', (error) => {
console.error('Connection error:', error);
});
// Join a room
function joinRoom(roomName) {
socket.emit('join-room', roomName);
}
// Send a message
function sendMessage(roomName, message) {
socket.emit('send-message', {
room: roomName,
message: message
});
}
// Listen for messages
socket.on('receive-message', (data) => {
console.log('New message:', data);
// Update UI with new message
});
// Listen for user join/leave
socket.on('user-joined', (data) => {
console.log('User joined:', data);
// Update UI to show new user
});
socket.on('user-left', (data) => {
console.log('User left:', data);
// Update UI to show user left
});
// Typing indicators
function startTyping(roomName) {
socket.emit('typing', { room: roomName });
}
function stopTyping(roomName) {
socket.emit('stop-typing', { room: roomName });
}
socket.on('user-typing', (data) => {
console.log('User typing:', data);
// Show typing indicator in UI
});
// Reconnection handling
socket.on('reconnect', (attemptNumber) => {
console.log('Reconnected after', attemptNumber, 'attempts');
});
socket.on('reconnect_attempt', (attemptNumber) => {
console.log('Reconnection attempt:', attemptNumber);
});