WebSockets
ตอนที่ 2 http://aobkung.blogspot.com/2015/03/websockets-2.htmlตอนที่ 3 http://aobkung.blogspot.com/2015/05/websockets-3.html
ถ้าจะให้พูดง่ายๆ คำพูดไม่สวยหรูก็คือ เป็นสิ่งหนึ่งที่ทำให้ Client สามารถรับอะไรต่างๆนาๆที่ server อยากจะให้โดยที่ไม่ต้องส่ง requests ไปยัง server ว่ามีอะไรจะให้ไหม ถ้ามีส่งมาน๊ะ อะไรประมานนั้น จึงประหยัดทั้งเวลาที่ใช้รอในการ requests ลดการทำงานของ server ลง เพราะไม่ต้องรับ requests ถี่ๆ(บางคนใช้วิธีการตั้งเวลาเพื่อขอรีเควสเรื่อยๆอาจจะทุกๆ 2 วินาที) เป็นต้น
แต่ถ้าให้พูดถึงการทำโปรแกรมแชท , ทำ notification หรืออะไรก็แล้วแต่ที่เป็นไปในลักษณะ real time ก็มีวิธีที่จะนำไปใช้ได้อยู่คร่าวๆดังนี้
- Long Polling
- Server-Sent Event
- Websockets
Ajax Long Polling
client จะทำการส่ง requests ผ่าน http ไปยัง server จากนั้นเมื่อ server มี state ใหม่ๆหรือมี new information ที่จะต้องการส่งไปยัง Client ก็จะส่งข้อมูลมาให้ (โดยที่ไม่ต้องร้องขอข้อมูลไปบ่อยๆ แต่ร้องขอไปครั้งเดียว เมื่อมีอะไรเกิดขึ้นก็จะบอก) จึงต่างจาก Ajax Ploling ธรรมดา
Server-Sent Event
เมื่อ Client ส่ง request ไปยัง server ผ่าน HTTP ทาง sever จะสร้าง Process ขึ้นมาพร้อมกับการลืบค้น State ใหม่ๆกับ Database และส่งกลับมายัง Client รับ State ใหม่ๆไป ซึ้งจะเห็นได้จะเป็น Real-time traffic จาก server ไปสู่ client แต่วิธีการเช่นนี้จะมี Default delay อยู่ที่ 3 วินาที
Websockets
จะเป็นการที่ Client กับ Server เปิดการเชื่มต่อกัน ถ้าพูดให้เห็นภาพ เหมือนกับการที่เรา(Server)เอาเชือกมาผูกกับคนอื่นๆ(Client) และเชื่อมีแรงตึง ถ้าเชือกหย่อนเมื่อไหร่แปลว่าคนๆนั้นไม่ได้เชื่อมต่อ และการส่งของให้กันก็ร้อยผ่านเชือกไป เมื่อของไปกระทบตัวคนๆนั้นก็จะรู้ตัวและหยิบของไป ประมานนั้น ซึ้งไอ้เจ้า Web Sockets นี้จะสร้าง Process 1 Process ขึ้นมาด้วยการใช้คำสั่งของ Server เพื่อเป็น Process ที่ใช้ในการรองรับการเชื่มต่อ รอรับข้อมูล ส่งข้อมูล (Process เดียวบริการทุก Client) มันจึงเป็นเหตุผลให้มีสรรพคุณที่ได้โม้เอาไว้ในย่อหน้าแรก และนี่ละคือพระเอกของเรา
Conclusion
.. | Long-polling | Server-Sent Events | WebSockets |
---|---|---|---|
Browser support | Supported by the most of currently used browsers | Supported by Chrome 9+, Firefox 6+, Opera 11+, Safari 5+ | The latest hybi-10 protocol supported by Chrome 14, Firefox 7 betas, hybi-07 supported by Firefox 6 |
Server-loading | Takes little of CPU resources, but creates idle processes per user expending server memory | Works in many ways as long-polling, unless SSE doesn’t need to close connection every time when response is sent | The best possible solution. Server has the only process serving any requests. No loops, memory/CPU expense per client, but per client action |
Client-loading | Depends on implementation, though it always an asynchronous process. | Natively implemented in the browser, takes minimum resources | Natively implemented in the browser, takes minimum resources |
Timeliness | Near real-time, though black out period between sending response and making a new request adds some delay | Default delay 3 sec., but can be changed | True real-time |
Complexity of implementation | Very easy | Even easier | Requires an EventMachine server and a custom port being open |
จากตารางเปรียบเทียบจะเห็นได้ว่า WebSockets นั้น ด้าน server-loading นั้นเป็น The best possible solution เลยทีเดียวและ only process serving any requests ส่วนทางด้าน Timeliness นั้นก็คงพูดได้แค่ว่า True real-time ปัจจุบันเลยละจร้าาาาา
ข้อมูลอ้างอิง
งั้นเรามาเริ่มการ Impliment กันเลยดีกว่า ซึ้งเราจะทำด้วย ภาษา php ในฟั่งของ Server (ที่ใช้ Run เพื่อรองรับการเชื่อมต่อ ) และ javascript ใช้สำหรับ Client เพื่อเชื่อมต่อ ส่งข้อมูล และรับข้อมูล
(ผู้อ่านท่านไหนไม่คล่องเรื่อง javascript ajax jquery ก็ศึกษาเพิ่มเติมตามเว็บทั่วๆไป เพราะจะอธิบายทุกบรรทัดคงไม่ไหว )
.
.
.
.
.
.
.
แต่สำหรับตอนที่ 1 ขอพักเอาไว้เท่านี้ก่อนครับ บทความต่อไปในตอนที่ 2 จะเป็นการ impliment ครับ
ไม่มีความคิดเห็น:
แสดงความคิดเห็น