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 เกือบทุกประเภทแล้ว เลือกใช้ให้เหมาะสมแล้วกันครับ
ที่มา:https://khasathan.in.th/archives/747
ไม่มีความคิดเห็น:
แสดงความคิดเห็น