-
Notifications
You must be signed in to change notification settings - Fork 1
WebSockets
Adarshtheki edited this page Jun 9, 2025
·
2 revisions
Socket.IO is a library that enables real-time, bidirectional, and event-based communication between the browser and the server.
| Term | Side | Purpose |
|---|---|---|
io.on |
Server | Listen for new client connections |
socket.on |
Both | Listen for specific events from client/server |
socket.emit |
Both | Send a custom event to one client or to the server |
socket.broadcast.emit |
Server | Send to all clients except sender |
io.emit |
Server | Send to all clients |
socket.off |
Both | Unsubscribe from an event |
socket.join(room) |
Server | Join a named room for private chat, etc. |
io.to(room).emit |
Server | Send to all users in a specific room |
npm install express socket.io corsimport express from 'express';
import http from 'http';
import { Server } from 'socket.io';
import cors from 'cors';
const app = express();
const server = http.createServer(app);
const io = new Server(server, {
cors: { origin: 'http://localhost:5173', methods: ['GET', 'POST'] },
});
app.use(cors());
// 🔥 socket.io logic
io.on('connection', (socket) => {
console.log('✅ Client connected:', socket.id); // io.on
socket.on('message', (data) => {
// socket.on
console.log('📩 Message received:', data);
io.emit('message', data); // io.emit
});
socket.on('disconnect', () => {
console.log('❌ Disconnected:', socket.id); // socket.on (disconnect)
});
});
server.listen(5000, () => console.log('Server running on port 5000'));npm install socket.io-clientimport { io } from 'socket.io-client';
const socket = io('http://localhost:5000');
export default socket;import { useEffect, useState } from 'react';
import socket from '../socket';
const Chat = () => {
const [msg, setMsg] = useState('');
const [chat, setChat] = useState([]);
useEffect(() => {
// socket.on (listen for message)
socket.on('message', (data) => {
setChat((prev) => [...prev, data]);
});
// socket.off (cleanup)
return () => {
socket.off('message');
};
}, []);
const sendMessage = () => {
socket.emit('message', msg); // socket.emit
setMsg('');
};
return (
<div>
{chat.map((m, i) => (
<p key={i}>{m}</p>
))}
<input value={msg} onChange={(e) => setMsg(e.target.value)} />
<button onClick={sendMessage}>Send</button>
</div>
);
};
export default Chat;- Used on the server
- Called when a client connects
io.on('connection', (socket) => {
console.log('New connection:', socket.id);
});- Listen for a custom event
- Works both client-side and server-side
socket.on('message', (data) => {
console.log('Received:', data);
});- Send an event with optional data
socket.emit('message', 'Hello from client');- Send event to all clients except the sender
socket.broadcast.emit('userJoined', socket.id);- Send event to all connected clients
io.emit('announcement', 'New user joined!');- Unsubscribe from an event
socket.off('message');- Useful for private/group chat
socket.join('room1');
io.to('room1').emit('message', 'Room 1 message');