Skip to content

ทำไมต้อง Websocket ?

ทำไมต้อง Websocket ? ก่อนหาคำตอบของคำถามนี้คงต้องเล่าย้อนกลับไปถึงวิวัฒนาการของเว็บก่อน ถ้านับแล้วน่าจะมี 3 ยุค (ผมเดาเอง) คือ

  1. Static web เว็บยุคแรกๆ ยังทำอะไรไม่ได้มากนอกจากแสดงข้อมูลสร้างด้วย HTML, CSS เป็นหน้าๆ มีแต่ markup อย่างเดียว ผู้ใช้เข้ามาอ่านได้อย่างเดียวไม่มี interactive ระหว่าง client และ server
  2. Dynamic web มีภาษาโปรแกรมเข้ามาเกี่ยวข้องแรกๆ เป็น Javascript  ทำงานฝั่ง client ต่อมามีการใช้ CGI พวก Perl, PHP เขียนโปรแกรมทำงานฝั่ง server ด้วยทำให้มีการ interactive ระหว่าง client กับ server
  3. Real-time web ถ้าใช้การ interactive ระหว่าง client-server มันน่าจะอยู่กลุ่มเดียวกันกับข้อ 2 แต่ต่างกันนิดนึงคือมีการรับ-ส่งข้อมูลกันตลอดเวลาถ้า server มีการ PUSH ข้อมูลมาที่ client ก็จะแสดงผลทันทีไม่ต้อง request ไปที่ server ใหม่ การ request ไปที่ server ใหม่เช่นการ refresh หน้าเว็บต้อง request ข้อมูลที่ server ใหม่ทั้งหมดทำให้เกิด overhead ในการรับ-ส่งข้อมูล ถ้ายังนึกไม่ออกให้คิดถึงเฟซบุ๊กที่เวลาเพื่อนคอมเม้นต์ แล้วจะมีแจ้งเตือนเราเกือบจะทันที หรือ inbox ในหน้าเว็บ Gmail เวลามีอีเมลเข้าก็จะแจ้งเตือน unread เกือบจะทันทีเหมือนกัน

มาถึงตรงนี้ ก่อนที่จะถามว่า “ทำไมต้อง Websocket ?” คงต้องถามก่อนว่า “ทำไมต้อง real-time (วะ) ?” ที่จำเป็นต้อง real-time ก็เพราะมนุษย์เราต้องการอะไรที่ทันใจนี่แหละ ยิ่งเร็ว ยิ่งสะดวกยิ่งดี ก็เลยต้องหาเทคโนโลยีมาตอบโจทย์ตรงนี้ซึ่งก็คือ Websocket นั่นเอง

การทำงานของ Websocket คือเริ่มแรกเมื่อหน้าเว็บถูกโหลด client-server จะมีการ connect แช่ไว้จากนั้นก็จะใช้ช่องทางนี้ในการรับ-ส่งข้อมูลกัน ซึ่งจะไม่เกี่ยวกับ HTTP request อื่นๆ แล้ว ที่เหลือก็แค่ส่ง heartbeat ไว้ maintain session ไม่ต้องส่ง request ไปๆ มาๆ อีกซึ่ง overhead จะเยอะมาก

Websocket เป็นฟีเจอร์ของ HTML 5  โพรโตคอลใหม่ที่ส่งข้อมูลแบบสตรีมได้  browser รุ่นใหม่เริ่มรองรับฟีเจอร์นี้แล้วแต่ browser เก่าๆ ไม่สามารถทำงานได้ Socket.io เลยถูกพัฒนามาเพื่อแก้ปัญหานี้ (รองรับ IE6, IE7 ด้วย)

ถึงจะมีเทคโนโลยี Websocket สำหรับพัฒนา real-time app แต่ไม่ใช่ว่าทุกเว็บต้องเป็น real-time หมดครับถ้าไม่จำเป็นก็ไม่ต้องใช้ก็ได้เพราะการพัฒนา real-time app มันก็ยุ่งยากเหมือนกัน

2 Comments

  1. KKC KKC

    เคยคิดว่าจะศึกษาจริงจัง แต่พอเอาเข้าจริงสภาพแวดล้อมไม่ค่อยเอื้ออำนวย เลยพับเก็บไว้ก่อน หุหุ

    • Kor Kor

      ถ้าหมายถึง environtment ด้าน server ใช้ Cloud, PaaS ได้นะ

Leave a Reply

Your email address will not be published.