Infosec Matrix

Collection of Best Writeups for HackTheBox, Portswigger, Bug Bounty, TryHackme, OverTheWire…

Building Real-Time Applications with Socket.IO

Madhu deepak
Infosec Matrix
Published in
3 min readDec 20, 2024

--

image by Augustine Ebuka

What is Socket.IO?

Socket.IO is a JavaScript library that facilitates real-time communication through WebSockets. It offers features like automatic reconnection, event-based communication, and compatibility across various platforms. Socket.IO uses WebSockets when available but falls back to other techniques, ensuring broad browser support.

Key Features of Socket.IO:

  • Bidirectional Communication: Enables real-time data flow between the server and the client.
  • Cross-Browser Compatibility: Supports a wide range of browsers, ensuring seamless integration.
  • Event-Driven Architecture: Simplifies the development of dynamic applications through custom events.
  • Automatic Reconnection: Handles disconnections gracefully and reestablishes connections when needed.
  • Room and Namespace Support: Organizes connections for better scalability and efficiency.

Setting Up Socket.IO

Before diving into real-time application development, let’s set up Socket.IO.

Step 1: Install Socket.IO

Ensure you have Node.js installed on your system. Then, use npm to install Socket.IO:

npm install socket.io

Step 2: Create a Basic Server

Create a basic Node.js server to integrate Socket.IO:

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);

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');
});
});

server.listen(3000, () => {
console.log('Listening on port 3000');
});Step 3: Set Up the Client

Add the Socket.IO client script to your HTML file:

<!DOCTYPE html>
<html>
<head>
<title>Socket.IO Example</title>
</head>
<body>
<h1>Real-Time Application with Socket.IO</h1>
<script src="/socket.io/socket.io.js"></script>
<script>
const socket = io();

socket.on('connect', () => {
console.log('Connected to the server');
});
</script>
</body>
</html>

Building Real-Time Features

1. Real-Time Chat Application

Enable a real-time chat feature by emitting and listening to events:

Server-Side Code:

io.on('connection', (socket) => {
socket.on('chat message', (msg) => {
io.emit('chat message', msg);
});
});

Client-Side Code:

<input id="message" autocomplete="off" /><button>Send</button>
<ul id="messages"></ul>

<script>
const form = document.querySelector('form');
const input = document.getElementById('message');
const messages = document.getElementById('messages');

form.addEventListener('submit', (e) => {
e.preventDefault();
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>

2. Live Notifications

Broadcast real-time notifications to connected users:

Server-Side Code:

io.on('connection', (socket) => {
socket.on('send notification', (data) => {
io.emit('receive notification', data);
});
});

Client-Side Code:

socket.on('receive notification', (data) => {
alert(`New Notification: ${data.message}`);
});

3. Collaborative Editing

Sync data between users in real time, such as shared document editing:

Server-Side Code:

let documentData = '';

io.on('connection', (socket) => {
socket.emit('load document', documentData);

socket.on('edit document', (data) => {
documentData = data;
socket.broadcast.emit('update document', data);
});
});
Client-Side Code:
const editor = document.getElementById('editor');

socket.on('load document', (data) => {
editor.value = data;
});

editor.addEventListener('input', () => {
socket.emit('edit document', editor.value);
});

socket.on('update document', (data) => {
editor.value = data;
});
  1. Optimize Performance: Minimize the number of events sent to reduce latency.
  2. Implement Security Measures: Use authentication to prevent unauthorized access.
  3. Handle Scaling: Use techniques like clustering or integrating with load balancers for high-traffic applications.
  4. Monitor Connections: Track active connections and handle disconnections effectively.

Conclusion

Socket.IO empowers developers to build powerful, real-time applications with ease. Whether you’re creating a chat app, implementing live notifications, or enabling collaborative tools, Socket.IO provides a reliable and scalable solution. By following the steps and examples outlined in this guide, you can start developing engaging real-time features for your applications today.

--

--

Infosec Matrix
Infosec Matrix

Published in Infosec Matrix

Collection of Best Writeups for HackTheBox, Portswigger, Bug Bounty, TryHackme, OverTheWire, PwnCollege, PicoCTF, and More.

Madhu deepak
Madhu deepak

Written by Madhu deepak

Software Engineer and Developer