วันอังคารที่ 22 ธันวาคม พ.ศ. 2558

ws part 11 The programming models

>> ก่อนจะเข้ารายละเอียดเรื่อง WebSocket ใคร่แนะนำ model หรือรูปแบบเทคโนโลยีของการสื่อสารหรือการพูดคุยกันระหว่าง client กับ server แบบ real-time (ความจริงคือเกือบจะ real-time, เพราะ real-time จริงๆนั้นยังมีค่าเวลาของระยะทางที่ใช้ในการสื่อสาร) ที่มีมาหรือยังคงใช้อยู่ในปัจจุบัน ดังต่อไปนี้
- Polling
- Long polling
- Server-sent Events
- และ WebSockets

>> Polling เพื่อนๆทราบอยู่แล้วว่าการสื่อสารกันระหว่าง client กับ server จะเกิดขึ้นก็ต่อเมื่อ client เป็นผู้เปิดประเด็น (connect) การเจรจานี้กับทาง server, หากเราต้องการให้ข้อความหรือข้อมูลนี้เป็นปัจจุบันที่สุดโดยวิธีการของ polling เราจะต้องสั่งให้ client ถามหรือตรวจสอบ new updates กับ server อยู่เกือบจะตลอดเวลา หรือตามเวลาที่เรากำหนดไว้ก็ได้ เช่นกี่วินาทีก็ว่าไป วิธีการนี้ในแง่ของการประกันการมีชีวิตหรือ server จะสามารถทำงานตอบสนองต่อการร้องขอของทุก client โดยที่ไม่ล่มหรือเป็นลมนั้นน้อยมาก กล่าวได้ว่าเป็นวิธีการที่ด้อยประสิทธิภาพโดยสิ้นเชิงน่ะหรือ ตอบว่าใช่ ยกเว้น server สามารถควบคุมจำนวนการติดต่อเข้ามาของ client ได้ก็อีกเรื่องหนึ่ง

>> Long polling ขยับจาก Polling ดีขึ้นมาหน่อยตรงที่ลดจำนวนของ request หรือคำร้องขอลงได้หากว่าคำร้องขอก่อนหน้านี้ยังไม่ได้รับการตอบสนองจาก server, อธิบายในอีกแง่มุมหนึ่งคือ client เมื่อร้องขอข้อความหรือข้อมูลที่เป็นปัจจุบันไปยัง server คำร้องนี้จะมีอายุกำกับทันที (ค่าอายุโดย default เท่าไรนั้นก็ไม่รู้เหมือนกัน) หาก server ตอบกลับมาก็แล้วไป แต่หาก server ไม่ยอมตอบกลับมาและคำร้องนี้หมดอายุ, client จึงสามารถรังสรรค์วิธีการจัดการ (handler) กับ error หรือสิ่งที่เกิดขึ้นได้โดยสวัสดิกะ ต่างจากแบบ polling ที่ไม่สนใจอะไรทั้งนั้น (มันสนไม่ได้ เพราะมันไม่มีความคิดในการจัดการเรื่องทำนองนี้) ตัวอย่างที่เห็นชัดเจนเช่นการใช้ Ajax ดึงข้อมูลบางส่วนหรือเนื้อหาเฉพาะในส่วนที่ต้องการ update แบบ real-time มาแสดง โดยไม่ต้อง refresh ทั้งหน้า

long polling สามารถปรับใช้ให้ดีขึ้นได้อีก โดยใช้สิ่งที่เรียกว่า message body streaming เพื่อส่งข้อความหรือข้อมูลที่ต้องการจาก server สู่ client กล่าวคือ client ติดต่อไปหา server ก่อน และกำหนดให้ช่องทางการติดต่อนี้คงอยู่ตลอดไป (server ต้องไม่ close connection) ระหว่างนี้ server ก็จะทยอย update ข้อความหรือข้อมูลที่ต้องการนี้ให้ (ขอเรียกว่า chunk), ตัวอย่างการประยุกต์ทำได้โดยการใช้ javascript tags ควบคู่กับ iframe ของ html เป็นต้น

>> Server-sent Events เล่าไปแล้ว ณ part 9

>> WebSockets คือความคิดหรือเทคโนโลยีเพื่อใช้ติดต่อสื่อสารระหว่าง client กับ server แบบ real-time จริงจัง โดยอาศัยการเปิด port หรือ connection แช่ไว้ เป็นการติดต่อแบบสองทาง (bidirectional) กล่าวคือ client ส่งข้อความหรือข้อมูลสู่ server ด้วยเส้นทางเดียวกันนี้ server ก็ส่งข้อความหรือข้อมูลถึง client ได้ และยังดีกว่าเทคโนโลยี Ajax เพราะ client ไม่ต้องส่ง request ใหม่ไปหา server ทุกรอบไป (ก็บอกแล้วไงว่ามันเปิดช่องทางสื่อสารทิ้งไว้เลยตั้งแต่แรกเริ่มเจรจา) ตัวอย่างการใช้งานที่พบได้ทั่วไปเช่น
- โซเชียลฟีด: ทำให้เรารู้ว่าเพื่อนของเรากำลังทำอะไรอยู่
- เกมส์มัลติเพลย์เยอร์: ทำเกมส์บนเว็บได้แค่เพียงเขียน javascript ติดต่อกับ DOM โดยไม่ต้องพึ่ง Flash อีกต่อไป
- การทำงานร่วมกัน อย่างการแก้ไขโค้ด เป็นต้น
- ข้อมูลการคลิก: การเก็บข้อมูลการคลิก 1 ครั้งโดยการใช้ 1 HTTP request นั้นเป็นเรื่องที่สิ้นเปลือง การใช้ WebSocket ซึ่งต่อ 1 connection ค้างเอาไว้แล้วส่งข้อมูลทุกการคลิกของผู้ใช้ดูจะเป็นเรื่องที่ประหยัดและเหมาะสมกว่า
- การแสดงผลการเปลี่ยนแปลงเกี่ยวกับการเงิน (financial ticker): เช่นการอัพเดตราคาหุ้น หรือสิ่งที่มีการเปลี่ยนแปลงราคาตลอดเวลา
- อัพเดตข่าวกีฬา
- มัลติมีเดียแชท
- การเรียนออนไลน์
- อื่นๆมากมาย

*** หมายเหตุ ตัวอย่างการใช้งานที่พบนี้นำมาจาก
https://www.blognone.com/node/58036

>> part ต่อไปเราจะมาเขียนโปรแกรม WebSocket โดยภาษาจาวาครับ คืนนี้ดึกแล้วสวัสดี

ไม่มีความคิดเห็น:

แสดงความคิดเห็น