Skip to content

https://www.google.com/imgres?q=node js architectures&imgurl=https%3A%2F%2Fcdn.buttercms.com%2F0Nh1yR6SSPwqnsKYSfHa&imgrefurl=https%3A%2F%2Fscoutapm.com%2Fblog%2Fnodejs-architecture-and-12-best-practices-for-nodejs-development&docid=Dvy3ZzU_2M1VaM&tbnid=K7kQHseVOqfHlM&vet=12ahUKEwi2_NyA6-SHAxUZTGwGHS5POBoQM3oECBcQAA..i&w=871&h=366&hcb=2&ved=2ahUKEwi2_NyA6-SHAxUZTGwGHS5POBoQM3oECBcQAA

https://www.google.com/imgres?imgurl=https%3A%2F%2Fmedia.licdn.com%2Fdms%2Fimage%2FD5612AQFVj6bCg39xDA%2Farticle-inline_image-shrink_1500_2232%2F0%2F1662056038418%3Fe%3D1727308800%26v%3Dbeta%26t%3DZsqKetqeT550iO8WqGVYR2yGfysUO0VF7Y6LpNF4KfQ&tbnid=KQatelJ6EUzGSM&vet=12ahUKEwi2kPOB6-SHAxVvfWwGHVmpM-8QxiAoA3oECAAQIQ..i&imgrefurl=https%3A%2F%2Fwww.linkedin.com%2Fpulse%2Fnodejs-architecture-udara-abeythilake&docid=-8UpMIu3IGF4IM&w=1741&h=736&itg=1&q=node js architectures&ved=2ahUKEwi2kPOB6-SHAxVvfWwGHVmpM-8QxiAoA3oECAAQIQ

https://www.google.com/imgres?imgurl=https%3A%2F%2Fwww.simform.com%2Fwp-content%2Fuploads%2F2020%2F04%2Fnode.js-architecture.png&tbnid=oJW6I2BaHR1m8M&vet=12ahUKEwi2kPOB6-SHAxVvfWwGHVmpM-8QxiAoCHoECAAQMw..i&imgrefurl=https%3A%2F%2Fwww.simform.com%2Fblog%2Fwhat-is-node-js%2F&docid=twj2uiyT4kCOYM&w=1434&h=718&itg=1&q=node js architectures&ved=2ahUKEwi2kPOB6-SHAxVvfWwGHVmpM-8QxiAoCHoECAAQMw

How Node.js Works

Single-Threaded Event Loop

Node.js ทำงานบนโมเดลลูปเหตุการณ์แบบเทรดเดียว ซึ่งหมายความว่าใช้เธรดหลักเพียงตัวเดียวในการจัดการคำขอและประมวลผลการทำงานต่างๆ แทนที่จะรอให้แต่ละงานเสร็จสิ้น (ซึ่งจะบล็อกเธรด) Node.js ใช้การทำงานแบบอะซิงโครนัสเพื่อให้เธรดพร้อมสำหรับงานอื่นๆ

  • Event Loop : เป็นส่วนประกอบหลักของ Node.js ที่ตรวจสอบสแต็คการเรียกใช้งานและคิวงานอย่างต่อเนื่องเพื่อจัดการการทำงานต่างๆ มันจะประมวลผล callback จากคิวงานเมื่อสแต็คการเรียกใช้งานว่างเปล่า
    • Call Stack : ใช้เก็บฟังก์ชันที่กำลังทำงานอยู่
    • Task Queue : ใช้เก็บ callback ที่ไม่ซิงโครนัส (เช่น การทำงาน I/O) ที่ต้องการการประมวลผลเมื่อสแต็คการเรียกใช้งานว่าง

Non-Blocking I/O

Node.js ใช้การทำงาน I/O แบบไม่บล็อก (อะซิงโครนัส) ซึ่งช่วยให้มันจัดการการทำงานหลายอย่างพร้อมกันได้ เมื่อการทำงาน I/O (เช่น การอ่านไฟล์หรือการค้นหาฐานข้อมูล) เริ่มต้น Node.js จะไม่รอให้การทำงานนั้นเสร็จสิ้น มันจะดำเนินการโค้ดอื่นๆ ต่อไป เมื่องาน I/O เสร็จสิ้น ฟังก์ชัน callback ของมันจะถูกเพิ่มลงในคิวงาน

  • Callback: ฟังก์ชันที่ถูกดำเนินการเมื่อการทำงาน I/O เสร็จสิ้น
  • Promises: ทางเลือกที่ทันสมัยสำหรับ callback ซึ่งช่วยในการจัดการการทำงานแบบอะซิงโครนัสได้ดียิ่งขึ้น
  • Async/Await: ไวยากรณ์ที่ทำให้การทำงานกับ promises ง่ายและอ่านง่ายขึ้น

Event-Driven Architecture

Node.js สร้างขึ้นบนสถาปัตยกรรมที่ขับเคลื่อนด้วยเหตุการณ์ ซึ่งหมายความว่ามันตอบสนองต่อเหตุการณ์ (เช่น คำขอของผู้ใช้, การอ่านไฟล์) และดำเนินการจัดการเหตุการณ์เมื่อเหตุการณ์เหล่านั้นเกิดขึ้น

  • Event Emitters: Node.js ใช้คลาส EventEmitter ในการจัดการเหตุการณ์ คุณสามารถสร้างและจัดการเหตุการณ์ที่กำหนดเอง และลงทะเบียนฟังก์ชันจัดการ (handlers) สำหรับเหตุการณ์เหล่านี้

Modules and Package Management

Node.js ใช้สถาปัตยกรรมแบบโมดูล ซึ่งช่วยให้โค้ดถูกจัดระเบียบในโมดูลที่สามารถนำกลับมาใช้ใหม่ได้

  • CommonJS Modules: Node.js ใช้ระบบโมดูล CommonJS ซึ่งช่วยให้คุณสามารถส่งออกและนำเข้าโค้ดระหว่างไฟล์ได้โดยใช้ module.exports และ require
  • npm: ตัวจัดการแพ็กเกจของ Node.js ช่วยในการจัดการการพึ่งพาและแพ็กเกจ มันช่วยให้คุณติดตั้ง, อัปเดต, และใช้ไลบรารีและเครื่องมือต่างๆ จากที่เก็บ npm

Built-in Libraries

Node.js มาพร้อมกับไลบรารีที่ช่วยในการทำงานทั่วไป:

  • File System (fs): การจัดการการทำงานเกี่ยวกับไฟล์ เช่น การอ่านและเขียนไฟล์
  • Path (path): การจัดการและแปลงเส้นทางไฟล์และไดเร็กทอรี
  • Buffer (buffer): การจัดการข้อมูลไบนารี
  • Stream (stream): การจัดการข้อมูลที่เป็นสตรีม เช่น การอ่าน/เขียนไฟล์ขนาดใหญ่

Error Handling

Node.js จัดการข้อผิดพลาดแบบอะซิงโครนัส ข้อผิดพลาดสามารถจับได้ใน callback, promises, หรือ async/await การจัดการข้อผิดพลาดอย่างถูกต้องเป็นสิ่งสำคัญเพื่อให้แน่ใจว่าแอปพลิเคชันจะไม่หยุดทำงานโดยไม่คาดคิด

  • Try/Catch: สำหรับโค้ดซิงโครนัสและ async/await
  • Error Event: สำหรับการจัดการข้อผิดพลาดในโค้ดที่ขับเคลื่อนด้วยเหตุการณ์

ตัวอย่างการทำงานของ Node.js

นี่คือตัวอย่างง่ายๆ ของเซิร์ฟเวอร์ HTTP ด้วย Node.js:

js
const http = require('http');

// สร้างเซิร์ฟเวอร์ HTTP
const server = http.createServer((req, res) => {
  res.statusCode = 200;
  res.setHeader('Content-Type', 'text/plain');
  res.end('Hello, Node.js!\n');
});

// เซิร์ฟเวอร์ฟังที่พอร์ต 3000
server.listen(3000, '127.0.0.1', () => {
  console.log('Server running at http://127.0.0.1:3000/');
});
  • สร้างเซิร์ฟเวอร์: http.createServer สร้างอินสแตนซ์เซิร์ฟเวอร์ใหม่
  • การจัดการคำขอ: ฟังก์ชัน callback จัดการคำขอที่เข้ามาและส่งการตอบกลับ
  • การฟัง: server.listen ทำให้เซิร์ฟเวอร์เริ่มฟังการเชื่อมต่อที่พอร์ตที่ระบุ

สรุป

Node.js ทำงานบนโมเดลเทรดเดียวที่ใช้ลูปเหตุการณ์และการทำงาน I/O แบบไม่บล็อก โดยมีสถาปัตยกรรมที่ขับเคลื่อนด้วยเหตุการณ์ ช่วยให้สร้างแอปพลิเคชันที่สามารถขยายได้และมีประสิทธิภาพ โดยใช้เทคนิคการเขียนโปรแกรมแบบอะซิงโครนัสและไลบรารีที่มาพร้อมกับ Node.js

Released under the MIT License