Skip to content

Node.js tips: Socket.io การใช้งาน emit และ broadcast

การส่งข้อมูลระหว่าง client และ server ของ Socket.io ใช้ method  emit() ซึ่งก็มีการใช้งานหลายแบบตามแต่access control ของแต่ละ app ผมขอสรุปตามรูปแบบที่ผมใช้งานบ่อยๆ ดังนี้ครับ

สมมุติว่าผม require  module socket.io เข้ามาแบบนี้

 1. ส่งหา client ทั้งหมดรวมทั้งตัวเองด้วย

สามารถใช้ emit() ได้เลย

 2. ส่งหา client ทุกคนยกเว้นตัวเอง

นอกจาก broadcast หาทุก client แล้วยัง broadcast หาเฉพาะ client ที่ subscribe ได้ด้วย client ที่จะรับข้อความได้ต้อง subscribe channel ก่อนด้วยคำสั่ง  socket.join('room_name')

ตอนจะ emit ข้อมูลไปก็ใช้ method to()  แล้วระบุชื่อ room ที่จะ broadcast

 3. ส่งหาเฉพาะ client ใด client หนึ่ง

ถ้าลอง console.log(io.sockets)  ออกมาดูจะเจอ session id ของ client ที่ connect เข้ามาในระบบ จะส่งหา client ไหนก็ให้ระบุ session id เช่น  io.sockets['xxxx'] เราจะได้ object ของ socket มาสามารถเอาใช้งาน emit, broadcast ได้เหมือนปกติ ตามตัวอย่างข้างล่าง

การใช้งานแบบนี้จะใช้กับ app ที่มีการส่งข้อมูลที่เป็นส่วนตัวมี privacy แบบ 1 ต่อ 1 มีการส่งข้อมูลหา client เพียงคนเดียวเช่น ระบบแชท (ไม่ใช่ห้องแชทรวม) แบบ facebook ที่จะมีเฉพาะคู่สนทนาเท่านั้นที่จะเห็นข้อความ ซึ่งโดยปกติการ implement app แบบนี้จะใช้ซอฟต์อื่นเพื่อ manage session ด้วย (ผมชอบใช้ Redis)

การใช้งานทั้ง 3 รูปแบบน่าจะครอบคลุม app เกือบทุกประเภทแล้ว เลือกใช้ให้เหมาะสมแล้วกันครับ

Be First to Comment

Leave a Reply

Your email address will not be published.