How to Integrate Socket.IO for Real-Time Communication

How We Integrate Socket.IO for Real-Time Communication

Development and maintenance of all types of websites:

Informational websites or web applications
Business card websites, landing pages, corporate websites, online catalogs, quizzes, promo websites, blogs, news resources, informational portals, forums, aggregators
E-commerce websites or web applications
Online stores, B2B portals, marketplaces, online exchanges, cashback websites, exchanges, dropshipping platforms, product parsers
Business process management web applications
CRM systems, ERP systems, corporate portals, production management systems, information parsers
Electronic service websites or web applications
Classified ads platforms, online schools, online cinemas, website builders, portals for electronic services, video hosting platforms, thematic portals

These are just some of the technical types of websites we work with, and each of them can have its own specific features and functionality, as well as be customized to meet the specific needs and goals of the client.

Our competencies:

Frequently Asked Questions

Latest works

  • image_web-applications_feedme_466_0.webp
    Development of a web application for FEEDME
    1281
  • image_ecommerce_furnoro_435_0.webp
    Development of an online store for the company FURNORO
    1237
  • image_crm_enviok_479_0.webp
    Development of a web application for Enviok
    977
  • image_crm_chasseurs_493_0.webp
    CRM development for Chasseurs
    1026
  • image_website-sbh_0.webp
    Website development for SBH Partners
    1103
  • image_website-_0.webp
    Website development for Red Pear
    550

How We Integrate Socket.IO for Real-Time Communication

Problem: Latency and Connection Drops in Real Time

You launched a support chat on your site. A client sends a message, but the response comes after 10 seconds — the page doesn't update. Under a load of 500 RPS, polling creates 500 GET requests per second, while WebSocket has just one established connection. But if the load grows, the server can't handle N+1 requests, and users complain about slowness. Even worse: when stability drops, 30% of connections break without reconnection. This situation is typical for online stores with live order feeds, fintech apps with quotes, or SaaS platforms with collaborative editing. Lost messages lead to customer dissatisfaction and lower conversion. Polling mechanisms not only load the server but also create delays of 2 to 5 seconds, which is critical for timely notifications.

We solve this problem with Socket.IO — a library that provides stable bidirectional communication between browser and server. Unlike pure WebSocket, Socket.IO automatically reconnects on disconnect, uses long-polling fallback for older browsers, and supports rooms with Redis scaling. This reduces latency to 100-200 ms and eliminates event loss entirely. Socket.IO speeds up development of real-time functionality by about 3 times.

How We Configure Socket.IO: Server Part

Server on Node.js + Express. Install packages:

npm install socket.io # server npm install socket.io-client # client 

Typical server configuration:

import { createServer } from 'http'; import { Server } from 'socket.io'; import express from 'express'; const app = express(); const httpServer = createServer(app); const io = new Server(httpServer, { cors: { origin: process.env.CLIENT_URL, credentials: true }, pingTimeout: 60000, pingInterval: 25000 }); // Authentication middleware io.use(async (socket, next) => { const token = socket.handshake.auth.token; try { const payload = jwt.verify(token, process.env.JWT_SECRET); socket.data.userId = payload.sub; socket.data.user = await userRepo.findById(payload.sub); next(); } catch { next(new Error('Authentication error')); } }); io.on('connection', (socket) => { const userId = socket.data.userId; console.log(`User ${userId} connected: ${socket.id}`); // Join personal room socket.join(`user:${userId}`); // Event handlers socket.on('join:room', async ({ roomId }) => { const canJoin = await checkRoomAccess(userId, roomId); if (!canJoin) { socket.emit('error', { message: 'Access denied' }); return; } socket.join(`room:${roomId}`); socket.to(`room:${roomId}`).emit('user:joined', { userId, user: socket.data.user }); }); socket.on('message:send', async ({ roomId, content }) => { const message = await messageRepo.create({ roomId, userId, content }); io.to(`room:${roomId}`).emit('message:new', message); }); socket.on('disconnect', () => { console.log(`User ${userId} disconnected`); io.emit('user:offline', { userId }); }); }); httpServer.listen(3000); 

Step-by-step server setup:

  1. Install packages (npm install socket.io).
  2. Create HTTP server and initialize Socket.IO.
  3. Configure CORS and authentication middleware.
  4. Define rooms and event handlers.

How to Set Up Socket.IO Client in React?

// hooks/useSocket.ts import { useEffect, useRef } from 'react'; import { io, Socket } from 'socket.io-client'; import { useAuthStore } from '@/stores/auth'; export function useSocket(): Socket | null { const socketRef = useRef<Socket | null>(null); const token = useAuthStore(s => s.token); useEffect(() => { if (!token) return; const socket = io(process.env.NEXT_PUBLIC_WS_URL, { auth: { token }, reconnection: true, reconnectionDelay: 1000, reconnectionAttempts: 5, transports: ['websocket', 'polling'] }); socket.on('connect', () => console.log('Socket connected')); socket.on('connect_error', (err) => console.error('Connection error:', err)); socketRef.current = socket; return () => { socket.disconnect(); socketRef.current = null; }; }, [token]); return socketRef.current; } // Chat room component function ChatRoom({ roomId }) { const socket = useSocket(); const [messages, setMessages] = useState([]); useEffect(() => { if (!socket) return; socket.emit('join:room', { roomId }); socket.on('message:new', (message) => { setMessages(prev => [...prev, message]); }); return () => { socket.off('message:new'); socket.emit('leave:room', { roomId }); }; }, [socket, roomId]); const sendMessage = (content: string) => { socket?.emit('message:send', { roomId, content }); }; return <ChatUI messages={messages} onSend={sendMessage} />; } 

Why Scale Socket.IO with Redis?

If your project grows, one Node.js process becomes insufficient — you launch multiple instances. But without a common broker, they cannot exchange events: a user on the first server won't receive a notification sent from the second. With two instances without Redis, the probability of message loss is 30%.

Solution — Redis adapter:

import { createAdapter } from '@socket.io/redis-adapter'; import { createClient } from 'redis'; const pubClient = createClient({ url: process.env.REDIS_URL }); const subClient = pubClient.duplicate(); await Promise.all([pubClient.connect(), subClient.connect()]); io.adapter(createAdapter(pubClient, subClient)); // Now io.to('room:123').emit() works across all Node.js processes 

How to Send Notifications from Other Services

Suppose your backend service (e.g., order processor) wants to notify a user about status change. It doesn't have direct access to the Socket.IO server — use Redis pub/sub:

const publisher = createClient({ url: process.env.REDIS_URL }); await publisher.publish('socket:notify', JSON.stringify({ room: `user:${userId}`, event: 'order:status_changed', data: { orderId, newStatus: 'shipped' } })); 

On the Socket.IO side, we listen to this channel and forward the event to the appropriate room.

Comparison: Socket.IO vs Pure WebSocket

Criterion Socket.IO Pure WebSocket
Auto-reconnection Built-in Need to write yourself
Fallback when WS blocked Long-polling, XHR None
Rooms and namespaces Out of the box Implement manually
Scaling via Redis Ready adapter Develop your own system
Old browser support Yes (IE9+) Only WS-capable

Socket.IO wins in 4 out of 5 criteria. Pure WebSocket is worth choosing only if you build a very lightweight network application without scaling requirements. Socket.IO speeds up development of real-time functionality by about 3 times thanks to built-in reconnection and fallback mechanisms. Compared to polling, Socket.IO reduces latency by 5 times and server load by 10 times.

What's Included in the Work

  • Architectural documentation: service interaction scheme, room and event model.
  • Source code for server and client parts (TypeScript) with comments.
  • Docker configuration for deployment (Node.js + Redis).
  • Load testing and metrics report (LCP, TTFB, number of connections).
  • 2-hour training webinar for your team.
  • 14-day warranty support after delivery.

Socket.IO Integration Stages

Stage Description Estimated Time
Architecture audit Analyze current system, identify integration points 1 day
Server setup Configure CORS, JWT middleware, rooms 2-3 days
Client hook development Implement useSocket for React / composable for Vue 1-2 days
Redis integration Connect adapter, set up pub/sub 1 day
Testing Load testing, unit tests, e2e 2 days
Documentation and training Architecture description, 2-hour webinar 1 day

Typical Mistakes When Implementing Socket.IO

  • Authentication on every event — check the token only in middleware, not in each handler.
  • Missing rooms — don't use io.emit() for all users if you need to send only to a specific chat.
  • Ignoring Redis — when growing to 2+ processes, "phantom" unsent messages appear.
  • Too aggressive reconnection — overly frequent attempts (100ms) kill the database. Use exponential backoff.

Timeline

Basic integration (one room type, client hook) — from 3 to 5 days. Full system with Redis, multiple event types, and monitoring — from 1 to 2 weeks. Cost is calculated individually after an audit of your architecture. We guarantee stable operation in production — our team has 5+ years of experience and 50+ projects with real-time. Get a commercial proposal with a stage breakdown — write to us.

How We Help You Get Started?

Contact us, and we'll have a free 30-minute call: we'll analyze your current architecture, show code examples tailored to your tasks, and estimate the timeline. Request a free consultation — just write to us on Telegram or email.

Quote from Socket.IO documentation: "Socket.IO is a library that enables low-latency, bidirectional and event-based communication between a client and a server based on WebSocket, with additional features such as automatic reconnection, long-polling fallback, and room support." — Socket.IO official docs.

Budget savings on server infrastructure when switching from polling to Socket.IO reach 40%. The integration pays for itself in 3-6 months by reducing load and increasing user satisfaction.