Socket.IOIntermediate
Socket.IO with Express.js
Express ও Socket.IO একই server-এ চালানো, REST থেকে socket emit — বাংলায় গাইড।
21টি অংশবাংলা ভাষায়
বাস্তব project-এ সাধারণত REST API আর real-time একসাথে লাগে। Express app আর Socket.IO server একই HTTP server শেয়ার করতে পারে — ফলে একই port-এ দুটোই চলে।
শেখার লক্ষ্য
- Express app ও Socket.IO-এর মধ্যে HTTP server শেয়ার করা
- REST route থেকে socket event emit
- একই port, একই process — deploy সহজ
HTTP Server শেয়ার করা
server.jsjavascript
javascript
const express = require("express");
const { createServer } = require("node:http");
const { Server } = require("socket.io");
const app = express();
app.use(express.json());
// Express app কে HTTP server-এ মুড়ে দিন
const httpServer = createServer(app);
// সেই একই server-এ Socket.IO
const io = new Server(httpServer, {
cors: { origin: "http://localhost:5173" },
});
app.get("/", (req, res) => {
res.send("REST + Socket.IO একসাথে");
});
io.on("connection", (socket) => {
console.log("socket connected:", socket.id);
});
httpServer.listen(3000, () => {
console.log("http://localhost:3000");
});Line-by-line:
createServer(app)— Express app-কে Node HTTP server-এ পরিণত করেnew Server(httpServer, {...})— Socket.IO সেই server-এর উপরেapp.get(...)— সাধারণ REST routeio.on(\"connection\", ...)— realtimehttpServer.listen(...)— একটাই port, দুটোই serve করে
app.listen নয়
Socket.IO যোগ করার পর app.listen(3000) নয় — httpServer.listen(3000) ব্যবহার করুন। নাহলে socket server কখনো bind হবে না।
REST থেকে Socket-এ Emit
ধরুন একটি order POST route আছে; নতুন order এলে socket-এ সবাইকে জানানো হবে।
REST + socket emitjavascript
javascript
app.post("/api/orders", (req, res) => {
const order = {
id: Date.now(),
item: req.body.item,
};
// REST response
res.status(201).json(order);
// একই সাথে realtime notify
io.emit("order:new", order);
});কেন এটা শক্তিশালী
একই business logic দুই চ্যানেলে ব্যবহার হয় — client REST POST দিয়ে order দেয়, আর বাকি সব connected client সাথে সাথে order:new পায়। Admin dashboard, notification, live list — সব একই socket থেকে চলে।
Socket Handler-এ Express-এর তথ্য
reuse servicejavascript
javascript
io.on("connection", (socket) => {
// query, headers ইত্যাদি handshake থেকে
const token = socket.handshake.auth.token;
socket.on("orders:list", async (_, ack) => {
// চাইলে Express-level service সরাসরি ব্যবহার করুন
const orders = await orderService.findAll();
ack(orders);
});
});Project Structure
src/
├── server.js # httpServer + io setup
├── app.js # express app + routes
├── socket/
│ └── index.js # io.on("connection", ...) handlers
├── services/
│ └── order.service.js
└── models/সাধারণ ভুল ও সমাধান
- দুটি আলাদা server — REST
:3000, socket:4000— CORS ও deployment জটিল; এক server-এ রাখা ভালো app.listenব্যবহার — socket কাজ করবে না;httpServer.listen- Express middleware-এ socket event emit ভুলে যাওয়া — business logic-এ socket reference import/DI করুন
Practice Task
- Express app-এর সাথে Socket.IO একই port-এ চালান
/api/ordersPOST route থেকেio.emitদিয়ে সব client-কে notify করুন- একটি service function দুই জায়গায় (REST ও socket) reuse করুন
সম্পর্কিত অধ্যায়: CORS Configuration · Socket.IO with Next.js · Building a Real-Time Chat Application
শেষ প্যারায় নিজে practice করুন — কোড কপি করে নিজের এডিটরে চালিয়ে দেখুন।