Skip to content

บันทึกการใช้งาน Socket.io v1 และประเด็นที่น่าสนใจ

ใครที่ใช้ Node.js ในการทำ real-time application น่าจะรู้จัก WebSocket และ Socket.io กันเป็นอย่างดี ตอนนี้ Socket.io เดินทางมาถึง version 1 แล้ว (ล่าสุดที่ผมเขียนโพสต์นี้คือ 1.5.0) ซึ่งก็มีหลายอย่างเปลี่ยนไปจากรุ่น 0.9 ค่อนข้างมาก หลายโปรเจกต์ที่ผมเคยเขียนไว้ด้วย version 0.9 ตอนนี้ก็ outdated ไปแล้วไม่สามารถใช้งาน version 1 ได้ แต่ก็มีบางงานที่ใช้ version 1 แล้ว พบประเด็นที่น่าสนใจเลยอยากบันทึกไว้สักหน่อย

สิ่งที่เปลี่ยนไปใน Socket.io version 1

Socket.io version 1 core ตอนนี้เปลี่ยนไปใช้ Engine.io ซึ่งประสิทธิภาพดีขึ้น ดูจากโพสต์นี้ Finding the right Node.js WebSocket implementation และสามารถใช้งานแบบ standalone ได้โดยไม่ต้องไปเกาะกับ http server เหมือนแต่ก่อนแล้ว สามารถใช้แบบนี้ได้เลย

การใช้งานในฝั่ง client ที่เป็น browser สามารถเรียกไฟล์ socket.io.js จาก CDN ได้เลยไม่ต้องเรียกจาก http server ที่เรา bind Socket.io ไว้เหมือนแต่ก่อน ดูจาก document นี้ ส่วนการใช้งานแบบ server-side client ได้ โดยใช้ socket.io-client

ปัญหาอย่างหนึ่งของ Socket.io คือการทำ Horizontal scaling คือการรันหลายๆ instances ช่วยกันทำงานหลัง load balance ตอนนี้สามารถใช้ socket.io-redis middleware เป็น adapter สามารถส่ง messages นอก context ของ Socket.io process ได้โดยใช้ฟีเจอร์ PubSub ของ Redis เป็นตัวช่วยกระจาย messages

ประเด็นที่ต้องสนใจในการใช้งาน Socket.io version 1

การใช้งาน Socket.io แบบ standalone โดยไม่ bind http ไม่รองรับ options ที่ set ให้กับ Engine.io แม้ใน document จะบอกว่า options อะไรก็ตามที่ส่งไปกับ socket.io จะถูกส่งให้ engine.io ด้วย อันนี้ผมเจอเองโดยเปิด debug mode แล้ว options ที่ set ไว้ไม่ถูกใช้เลย อาจจะเป็น bug หรือข้อจำกัดก็ได้ เลยต้อง bind http เหมือนเดิมแบบนี้

ถ้าเจออะไรน่าสนใจอีกจะบันทึกเรื่อยๆ ครับ

Be First to Comment

Leave a Reply

Your email address will not be published.