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

WebSockets กับเว็บแชทขั้นพื้นฐาน ตอนที่ 1


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 ก็มีวิธีที่จะนำไปใช้ได้อยู่คร่าวๆดังนี้

  1. Long Polling
  2. Server-Sent Event
  3. 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-pollingServer-Sent EventsWebSockets
Browser supportSupported by the most of currently used browsersSupported 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-loadingTakes little of CPU resources, but creates idle processes per user expending server memoryWorks in many ways as long-polling, unless SSE doesn’t need to close connection every time when response is sentThe best possible solution. Server has the only process serving any requests. No loops, memory/CPU expense per client, but per client action
Client-loadingDepends on implementation, though it always an asynchronous process.Natively implemented in the browser, takes minimum resourcesNatively implemented in the browser, takes minimum resources
TimelinessNear real-time, though black out period between sending response and making a new request adds some delayDefault delay 3 sec., but can be changedTrue real-time
Complexity of implementationVery easyEven easierRequires 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 ครับ


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

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