...

Full Socket.IO Client & Server Cheat Sheet with Examples (Node.js + Express)

Full Socket.IO Client & Server Cheat Sheet with Examples Socket.IO is a powerful library for building real-time web applications using WebSockets and other fallback technologies. This guide gives you a complete cheat sheet for Socket.IO on both server-side (Node.js + Express) and client-side (browser), along with full example code for a working real-time chat application.

Server-Side Cheat Sheet (Node.js / Express + Socket.IO)

Event / Method Description
io.on('connection', socket => {})Fired when a new client connects.
socket.idUnique ID for the connected client. Changes on reconnect.
socket.on('eventName', callback)Listen for custom/built-in events from this client.
socket.emit('eventName', data)Send an event to only this client.
socket.broadcast.emit('eventName', data)Send an event to all other clients except this one.
io.emit('eventName', data)Send to all clients.
socket.join('roomName')Put this client into a room for group messages.
socket.leave('roomName')Remove this client from a room.
io.to('roomName').emit('eventName', data)Send an event to everyone in a room.
socket.on('disconnect', reason => {})Runs when a client disconnects.
socket.on('disconnecting', reason => {})Runs just before disconnect. You can still check rooms.
io.sockets.socketsMap of all connected sockets.
Array.from(io.sockets.sockets.keys())List all connected socket IDs.
io.fetchSockets()Promise returning socket objects for all connected clients.
socket.dataStore custom data for that socket.

Client-Side Cheat Sheet (Browser + Socket.IO)

Event / Method Description
const socket = io('http://localhost:3000')Connect to server.
socket.on('connect', () => {})Runs when connected. Access socket.id here.
socket.on('disconnect', reason => {})Runs when disconnected.
socket.on('eventName', callback)Listen for custom/built-in events from the server.
socket.emit('eventName', data)Send data/event to the server.
socket.idCurrent connection ID. Changes if reconnected.
socket.on('connect_error', err => {})Fired if connection fails.
socket.on('reconnect', attempt => {})Fired when reconnect succeeds.
socket.on('reconnect_attempt', attempt => {})Fired when trying to reconnect.
socket.on('reconnect_error', err => {})Fired if a reconnect attempt fails.
socket.on('reconnect_failed', () => {})Fired when all reconnect attempts fail.
socket.close()Manually disconnect from server.
socket.open()Manually reconnect to server.


💻 Step 1 — Server Code (Node.js + Express + Socket.IO)

// server.js
const express = require('express');
const http = require('http');
const { Server } = require('socket.io');

const app = express();
const server = http.createServer(app);
const io = new Server(server, { cors: { origin: "*" } });

// Store user mapping
let socketUsers = {};

io.on('connection', (socket) => {
    console.log('✅ User connected:', socket.id);

    // Save username from client
    socket.on('register_user', (username) => {
        socketUsers[socket.id] = username;
        console.log(`Registered ${username} with ID ${socket.id}`);
        io.emit('user_list', socketUsers);
    });

    // Handle messages
    socket.on('chat_message', (msg) => {
        console.log(`💬 ${socketUsers[socket.id]}: ${msg}`);
        io.emit('chat_message', {
            user: socketUsers[socket.id],
            message: msg
        });
    });

    // On disconnect
    socket.on('disconnect', (reason) => {
        console.log(`❌ User disconnected: ${socket.id} Reason: ${reason}`);
        delete socketUsers[socket.id];
        io.emit('user_list', socketUsers);
    });
});

server.listen(3000, () => {
    console.log('🚀 Server running on port 3000');
});


💻 Step 2 — Client Code (Browser)



<!DOCTYPE html>
<html>
<head>
    <title>Socket.IO Chat Example</title>
    <script src="https://cdn.socket.io/4.7.5/socket.io.min.js"></script>
</head>
<body>
    <h1>Socket.IO Chat</h1>
    <input id="username" placeholder="Enter username" />
    <button onclick="registerUser()">Register</button>

    <div id="chat">
        <input id="message" placeholder="Type message..." />
        <button onclick="sendMessage()">Send</button>
    </div>

    <h3>Connected Users:</h3>
    <ul id="users"></ul>

    <script>
        const socket = io('http://localhost:3000');

        // On connect
        socket.on('connect', () => {
            console.log('Connected! My ID:', socket.id);
        });

        // Update user list
        socket.on('user_list', (users) => {
            const userList = document.getElementById('users');
            userList.innerHTML = '';
            for (let id in users) {
                const li = document.createElement('li');
                li.textContent = `${users[id]} (${id})`;
                userList.appendChild(li);
            }
        });

        // Receive chat messages
        socket.on('chat_message', (data) => {
            console.log(`${data.user}: ${data.message}`);
        });

        // Register username
        function registerUser() {
            const name = document.getElementById('username').value;
            if (name.trim()) {
                socket.emit('register_user', name);
            }
        }

        // Send message
        function sendMessage() {
            const msg = document.getElementById('message').value;
            if (msg.trim()) {
                socket.emit('chat_message', msg);
                document.getElementById('message').value = '';
            }
        }
    </script>
</body>
</html>



What This Gives You

All major events for client & server.

Store usernames linked to socket.id.

Update user list on connect/disconnect.

Send and receive real-time messages.

                        

William Anderson

I am a versatile Full-Stack Web Developer with a strong focus on Laravel, Livewire, Vue.js, and Tailwind CSS. With extensive experience in backend development, I specialize in building scalable, efficient, and high-performance web applications.