Node.js arxitekturasi


ULASHISH

Node.js arxitekturasi nima?

Node.js bir vaqtning o‘zida ko‘plab ulanishlarni samarali va asosiy tarmoqni bloklamasdan boshqarish uchun mo‘ljallangan bitta oqimli, hodisalarga asoslanganarxitekturadan foydalanadi.

Bu Node.js-ni kengaytiriladigan tarmoq ilovalari, real vaqtda ilovalar va API yaratish uchun ideal qiladi.

Asosiy xususiyatlar: Bloklanmagan kiritish-chiqarish, voqea-hodisalar asosida boshqariladigan, voqealar sikli bilan bir-torbali, asinxron bajarish


Node.js arxitektura diagrammasi

Bu yerda Node.js so‘rovlarni qanday qayta ishlashga oid oddiy ko‘rinish:

1. Mijoz so‘rovi bosqichi

  • Mijozlar so‘rovlarni Node.js serveriga yuboradilar
  • Har bir so‘rov Voqealar navbatiga qo‘shiladi

2. Hodisa sikli bosqichi

  • Voqealar davri doimiy ravishdaVoqealar navbatini tekshiradi
  • So‘rovlarni birma-bir siklda qabul qiladi

3. So‘rovni qayta ishlash

  • Oddiy (bloklamaydigan) vazifalar asosiy oqim tomonidan darhol bajariladi
  • Murakkab/bloklash vazifalari Thread Poolga yuklanadi

4. Javob berish bosqichi

  • Vazifalarni bloklash tugallanganda, ularning callback funksiyasilari Callback-lar navbatiga (Callback Queue) joylashtiriladi.
  • Event Loop callback funksiyasilarni qayta ishlaydi va javoblarni yuboradi

Bloklanmagan misollar

Misol: Bloklanmagan faylni o‘qish

const fs = require('fs');
console.log('Before file read');
fs.readFile('myfile.txt', 'utf8', (err, data) => {
  if (err) throw err;
  console.log('File contents:', data);
});
console.log('After file read');
Misolni ishga tushirish »

Node.js fayl ishi tugashini kutmasligini ko‘rsatib, fayl mazmunidan oldin "Fayl o‘qilgandan keyin" qanday chop etilganiga e’tibor bering.

Misol: Bloklash va bloklanmaydigan kod

// Blocking code example
console.log('Start of blocking code');
const data = fs.readFileSync('myfile.txt', 'utf8'); // Blocks here
console.log('Blocking operation completed');

// Non-blocking code example
console.log('Start of non-blocking code');
fs.readFile('myfile.txt', 'utf8', (err, data) => {
  if (err) throw err;
  console.log('Non-blocking operation completed');
});
console.log('This runs before the file is read');
Misolni ishga tushirish »

Asosiy farq: Birinchi misol fayl o‘qilguncha butun jarayonni bloklaydi, ikkinchi misol esa fayl o‘qilayotgan vaqtda boshqa operatsiyalarni davom ettirish imkonini beradi.



Node.js dan qachon foydalanish kerak

Node.js ayniqsa quyidagilar uchun juda mos keladi:

  • I/O-ga bog‘langan ilovalar - Fayl operatsiyalari, ma’lumotlar bazasi so‘rovlari, tarmoq so‘rovlari
  • Real vaqtda ilovalar - Chat ilovalari, jonli bildirishnomalar, hamkorlik vositalari
  • API - RESTful xizmatlar, GraphQL API
  • Mikroservislar - Kichik, mustaqil xizmatlar

Eslatma: Node.js protsessor talab qiladigan vazifalar uchun eng yaxshi tanlov bo‘lmasligi mumkin, chunki ular hodisa siklini bloklashi mumkin. Bunday holatlar uchun quyidagilarni ko‘rib chiqing:

  • Ishchi iplardan foydalanish
  • Mikroservisni yanada mosroq tilda yaratish
  • Mahalliy qo‘shimchalardan foydalanish

Xulosa

Node.js tez va samarali, chunki u bloklanmaydigan hodisalar siklidan foydalanadi va tizimga og‘ir ishlarni topshiradi.

Bu unga bir vaqtning o‘zida, minimal resurslar bilan minglab ulanishlarni boshqarish imkonini beradi.

Asosiy imtiyozlar:

  • Bir vaqtning o‘zida ko‘plab ulanishlarni samarali boshqaradi
  • I/U bilan bog‘langan ilovalar uchun juda yaxshi
  • Mijoz va serverda JavaScript-dan foydalanadi
  • Paketlarning katta ekotizimi (npm)


W3Schools Pathfinder

Yutuqlaringizni kuzating – bu bepul!