รวมทุกอย่างเกี่ยวกับ nodejs [เพิ่มเติมเรื่อยๆ]

บทความนี้จะรวมเรื่องพื้นฐานเกี่ยวกับ Nodejs โดยรวมเก็บไว้สำหรับผมก็จะแจกไปด้วยนะครับ

พื้นฐาน

ผมคงไม่ต้องบอกว่าข้อดีทั่วๆไปว่า nodejs มันดียังไง แต่หลายๆอย่างที่ผมไม่ได้เข้าใจมันอย่างเรื่องหลักการทำงานของมันทำให้เราอาจจะงงเวลาเขียนหรือผิดพลาดบางเรื่องจนเป็นปัญหาภายหลังได้

  • Nodejs เป็น Single Threaded Event Loop Model จัดการพวก client ที่เข้ามาเชื่อมต่อ
  • แต่ความจริงมันจริงแค่ครึ่งเดียวของการเป็น single thread เพราะความจริงคือ Single thread ที่ทำงานร่วมกับ Background worker
  • Event loop ที่คอยรับคำสั่งจากภาษาอ่ะ มันวิ่งแค่ single และเอางานไปแจกให้พวก thread ที่แยกทางข้างหลัง

เรื่อง thread ใครไม่เข้าใจเชิญทางนี้ได้เลยครับ https://www.extremepc.in.th/cpu-core-vs-thread/

เกิดอะไรขึ้นใน Single thread event loop มาดู code ตัวอย่างกันหน่อยครับ

เมื่อรันคำสั่ง sockets.listen(4000) Web-Socket server จะถูกสร้างใน Single thread และ Event loop จะคอยดักอยู่ที่ port 4000 คราวนี้ถ้ามี client เข้ามาเชื่อมต่อ ตัว Event “onConnection” จะถูกเรียกให้ทำงาน มันจะทำการเอาคำสั่ง นี้ไปปล่อยใน thread pool ให้นึกถึงห้องที่มีกลุ่มคนงานที่พร้อมจะมารับงานไปทำต่อโดยใครวางก็มาต่อแถวรอกันในห้อง

สิ่งนี้เป็นสิ่งที่แตกต่างกับพวก apache หรือตัวเว็บ server อื่นๆ โดยถ้าหากมีคนมาเชื่อมต่อคนที่ 2,3,4,… ตัว Nodejs จะไม่สร้าง thread ใหม่มาแต่จะทำการให้ Event loop มาจับคำสั่งการเชื่อมต่อแต่ละ client และโยนงานต่อให้พวก worker ไปทำงานต่อ

ถ้ามองเหมือนเรื่องทั่วๆไปก็คือตัว Event loop เหมือนพนักงานต้อนรับ เราไปติดต่อเสร็จเราก็จะพาเราไปส่งในห้องและให้คนในห้องจัดการต่อ และ พนักงานต้อนรับก็ไปรับคนอื่นต่อได้เลยปล่อยให้คนในห้องจัดการกับเรื่องเราต่อนั่นเอง

โดย Libuv library จะทำงานร่วมกับ OS kernel การทำงานอย่างนี้ทำให้มันสามารถรองรับการทำงานเยอะๆได้ เพราะว่าพวก OS kernel ปัจจุบันก็ทำงานแบบ multi thread ได้ หลังจากทำงานครบหมดทุก thread ที่กระจายของ process นั้นๆแล้วมันจะบอก Nodejs ให้ทำการหยิบงานใหม่เข้า thread pool อีก

nodejs architecture
nodejs architecture

 

 

เรื่องพื้นฐานตั้งแต่ JS -> Nodejs เชิญด้านนี้ได้เลยครับ

เข้าใจ NodeJS ง่ายๆ สำหรับคนทำเว็บ

ข้างล่างเป็น concept ของ event loop เวลาที่ nodejs มันทำงานมันทำงานอย่างไร

Callback / Promise / Async – Await

แนะนำให้อ่าน blog ของน้องปันเจเลยอธิบายได้ดี

https://blog.panjmp.com/async-await-%E0%B9%80%E0%B8%A3%E0%B8%B2%E0%B8%A1%E0%B8%B2%E0%B8%A3%E0%B8%B9%E0%B9%89%E0%B8%88%E0%B8%B1%E0%B8%81-syntax-%E0%B8%97%E0%B8%B5%E0%B9%88%E0%B8%88%E0%B8%B0%E0%B8%A1%E0%B8%B2%E0%B9%80%E0%B8%9B%E0%B8%A5%E0%B8%B5%E0%B9%88%E0%B8%A2%E0%B8%99%E0%B9%82%E0%B8%A5%E0%B8%81%E0%B8%82%E0%B8%AD%E0%B8%87-javascript-%E0%B8%81%E0%B8%B1%E0%B8%99-3f02091eca05