Skip to content

Kor's blog Posts

คำแนะนำการพัฒนา real-time app ด้วย Node.js และ Socket.io

ผมใช้ Node.js ร่วมกับ Socket.io มาได้ซักพักแล้ว เอาไปใช้ในแลปเล็กๆ ส่วนตัวของผมเองและเอาไปใช้จริงในงานที่ทำด้วย ก็พอเห็นปัญหาการในพัฒนาพอสมควรขอสรุปปัญหาและวิธีแก้ของผมดังนี้ครับ

1. สไตล์การเขียนโปรแกรมแบบ Asynchronous

Node.js มันคือ Javascript ถ้าคุ้นเคยมาก่อนจะดีมาก การเขียนโดยทั่วไปเขียนเหมือน procedural programming ทำงานจากบนลงล่างแต่ก็มีส่วนที่เป็น asynchronous API ของภาษามีการใช้ callback function เยอะมาก

ด้วยความที่ Node.js เป็น event-driven หรือ event-based รันด้วย thread เดียว เพื่อให้รองรับการทำงานพร้อมกันและลด overhead ระหว่าง thread การทำงานของโปรแกรมจะเป็นแบบ asynchronous หมายความว่า I/O จะไม่ถูกบล็อคการทำงาน ตัวอย่างเช่น การใช้งาน AJAX เมื่อเริ่มทำงานก็จะ request ข้อมูลออกไประหว่างที่รอ response ตอบกลับมาคำสั่งบรรทัดข้างล่างก็จะงานของมันไป (ถ้าทำเป็นแบบ sync ต้องรอให้มี response ตอบกลับมาก่อนจึงจะทำคำสั่งต่อไปได้) เมื่อมีการ response ข้อมูลกลับมาก็จะมีการส่ง event บอกว่าการตอบกลับมาแล้ว ซึ่ง event ตรงนี้เราสามารถเขียนโค้ดเพื่อจับ event แล้วนำข้อมูลไปประมวลผลต่อ เช่น เอาไปแสดงผลหน้าเว็บต่อได้

ปัญหาที่พบในการเขียน asynchronous programming คือการคุม control flow และ scope ของตัวแปรเพราะมีการใช้ callback function เยอะมาก บางครั้งต้องเขียน callback function ซ้อนกันหลายชั้นทำให้เกิดปัญหาที่เรียกว่า “callback pyramid”

Node.js มี lib สำหรับเขียน control flow ของโปรแกรมหลายตัวส่วนตัวผมใช้ Async เพราะครอบคลุมการทำงานหลายรูปแบบ ใช้ง่ายและ document ค่อนข้างดี คนใช้เยอะตัวอย่างเยอะด้วยอันนี้แนะนำครับ