Last updated on August 3, 2016
ทำไมต้อง Websocket ? ก่อนหาคำตอบของคำถามนี้คงต้องเล่าย้อนกลับไปถึงวิวัฒนาการของเว็บก่อน ถ้านับแล้วน่าจะมี 3 ยุค (ผมเดาเอง) คือ
- Static web เว็บยุคแรกๆ ยังทำอะไรไม่ได้มากนอกจากแสดงข้อมูลสร้างด้วย HTML, CSS เป็นหน้าๆ มีแต่ markup อย่างเดียว ผู้ใช้เข้ามาอ่านได้อย่างเดียวไม่มี interactive ระหว่าง client และ server
- Dynamic web มีภาษาโปรแกรมเข้ามาเกี่ยวข้องแรกๆ เป็น Javascript ทำงานฝั่ง client ต่อมามีการใช้ CGI พวก Perl, PHP เขียนโปรแกรมทำงานฝั่ง server ด้วยทำให้มีการ interactive ระหว่าง client กับ server
- 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 มันก็ยุ่งยากเหมือนกัน
เคยคิดว่าจะศึกษาจริงจัง แต่พอเอาเข้าจริงสภาพแวดล้อมไม่ค่อยเอื้ออำนวย เลยพับเก็บไว้ก่อน หุหุ
ถ้าหมายถึง environtment ด้าน server ใช้ Cloud, PaaS ได้นะ