যখন আমি প্রথমবার Node.js শিখতে বসেছিলাম, তখন মাথায় শুধু একটাই প্রশ্ন ঘুরছিল—“একটা single thread দিয়ে কিভাবে হাজার হাজার request হ্যান্ডেল করবে?” 🤔
কিন্তু কয়েকদিনের প্র্যাকটিসেই বুঝলাম—আসল জাদুটা লুকিয়ে আছে এর event loop আর non-blocking nature-এর ভেতরে।
এবার আসুন একে একে দেখি Node.js-এর মূল কনসেপ্টগুলো।
- Single-Threaded কিন্তু সুপার পাওয়ারফুল
Node.js আসলে single-threaded। মানে, এটা একটা থ্রেডে চলে। শুনে মনে হতে পারে—“এতে তো সার্ভার ধীর হবে!”
কিন্তু না। Event loop এর কারণে Node.js একসাথে অনেকগুলো কাজ ম্যানেজ করতে পারে।
- Non-Blocking I/O
ভাবুন, আপনি রেস্টুরেন্টে গেলেন। ওয়েটার আপনার অর্ডার নিল, তারপর আরেকজন কাস্টমারের অর্ডার নিল। আপনার খাবার আসতে সময় লাগলেও ওয়েটার বসে থাকছে না, বরং অন্যদেরও সার্ভ করছে।
Node.js-ও একদম এভাবেই কাজ করে। ফাইল রিড করা, ডাটাবেস query করা—সব কিছু ব্যাকগ্রাউন্ডে হয়, সার্ভার meanwhile অন্য রিকোয়েস্ট হ্যান্ডেল করতে থাকে।
- Event Loop
Event loop-কে আমি বলি Node.js-এর হৃদয় ❤️
এটা সবকিছুর ফ্লো কন্ট্রোল করে—কোন কাজ শেষ হলে সেটা callback বা promise দিয়ে আবার কোডে ফিরিয়ে আনে। এজন্য Node.js একসাথে অনেক কাজ সামলাতে পারে।
- Asynchronous Programming
Node.js-এর আসল শক্তি async code। এখানে তিনটা জিনিস বেশি ব্যবহার হয়:
- Callback
- Promise
- async/await
const fs = require('fs');
// Asynchronous File Read
fs.readFile('data.txt', 'utf8', (err, data) => {
if (err) throw err;
console.log(data);
});
console.log("File is being read...");
উপরের কোডে আগে “File is being read...” প্রিন্ট হবে, তারপর ফাইল পড়া শেষ হলে ডেটা আসবে।
- Modules আর npm
Node.js পুরোপুরি modular। নিজের কোড আলাদা ফাইলে রেখে import করতে পারেন।
আর সাথে আছে npm, যেখানে প্রায় প্রতিটা সমস্যার জন্যই একটা প্যাকেজ পাওয়া যায়।
// Built-in Module
const path = require('path');
// npm Package
const express = require('express');
- Built-in Modules
- Node.js অনেক দরকারী জিনিস সঙ্গে নিয়ে আসে:
- http → সার্ভার বানাতে
- fs → ফাইল হ্যান্ডেল করতে
- path → ফাইল পাথ ম্যানেজ করতে
- os → সিস্টেম ইনফো বের করতে
- EventEmitter
Node.js-এ সবকিছু ইভেন্ট-ড্রিভেন।
যেমন, আমরা চাইলে নিজের ইভেন্টও বানাতে পারি:
const EventEmitter = require('events');
const event = new EventEmitter();
event.on('greet', () => {
console.log('Hello from Node.js!');
});
event.emit('greet');
- Streams
Node.js-এ ডেটা ধাপে ধাপে প্রসেস হয়। যেমন একটা বড় ভিডিও ফাইল—পুরোটা একসাথে না দিয়ে ছোট ছোট chunk আকারে পাঠানো হয়।
এই জন্যই Node.js ভিডিও স্ট্রিমিং বা বড় ডেটা ট্রান্সফারের জন্য দারুণ কাজ করে।
- Error Handling
Async কোডে error হ্যান্ডেল না করলে সার্ভার ক্র্যাশ করতে পারে। এজন্য try...catch, callback এর err প্যারামিটার, বা Promise.catch() ব্যবহার করতে হয়।
- Concurrency বনাম Parallelism
Concurrency: একসাথে অনেকগুলো কাজ ম্যানেজ করা (Node.js এখানে জিতেছে)।
Parallelism: একই সময়ে অনেক থ্রেডে কাজ করা (CPU heavy কাজের জন্য Worker Threads লাগে)।
📝 সারসংক্ষেপ
যদি সহজভাবে বলি, Node.js-এর মূল কনসেপ্ট হলো:
- Single-threaded কিন্তু async
- Event loop আর non-blocking I/O
- Modules + npm ecosystem
- Streams আর event-driven আর্কিটেকচার
এগুলো বুঝে গেলে Node.js নিয়ে খেলা শুরু করতে আর কোনো ঝামেলা হবে না। 🚀
Top comments (0)