WebSockets คืออนาคตที่แน่นอน
การทำโพลแบบยาวเป็นวิธีการที่สกปรกเพื่อป้องกันการสร้างการเชื่อมต่อสำหรับแต่ละคำขอเช่น AJAX แต่การทำโพลแบบยาวนั้นถูกสร้างขึ้นเมื่อไม่มี WebSockets ขณะนี้เนื่องจาก WebSockets การสำรวจระยะยาวกำลังจะหายไป
WebRTC อนุญาตสำหรับการสื่อสารแบบเพียร์ทูเพียร์
ผมขอแนะนำให้เรียนรู้WebSockets
เปรียบเทียบ:
เทคนิคการสื่อสารที่แตกต่างกันบนเว็บ
AJAX - →request
response
สร้างการเชื่อมต่อกับเซิร์ฟเวอร์ส่งส่วนหัวคำขอพร้อมข้อมูลเสริมรับการตอบกลับจากเซิร์ฟเวอร์และปิดการเชื่อมต่อ
รองรับเบราว์เซอร์ที่สำคัญทั้งหมด
โพลสำรวจความยาว - request
→การ→การwait
response
สร้างการเชื่อมต่อกับเซิร์ฟเวอร์อย่างที่ AJAX ทำ แต่รักษาการเชื่อมต่อแบบเปิดไว้ตลอดเวลา (ไม่นาน) ระหว่างการเชื่อมต่อไคลเอ็นต์ที่เปิดสามารถรับข้อมูลจากเซิร์ฟเวอร์ ไคลเอนต์ต้องเชื่อมต่อเป็นระยะหลังจากการเชื่อมต่อถูกปิดเนื่องจากการหมดเวลาหรือข้อมูล ในฝั่งเซิร์ฟเวอร์นั้นยังคงเป็นเหมือนคำขอ HTTP เช่นเดียวกับ AJAX ยกเว้นคำตอบตามคำขอจะเกิดขึ้นในขณะนี้หรือบางเวลาในอนาคตที่กำหนดโดยตรรกะของแอปพลิเคชัน
แผนภูมิการสนับสนุน (เต็ม) | วิกิพีเดีย
WebSockets - ↔client
server
สร้างการเชื่อมต่อ TCP ไปยังเซิร์ฟเวอร์และเปิดไว้นานเท่าที่ต้องการ เซิร์ฟเวอร์หรือไคลเอนต์สามารถปิดการเชื่อมต่อได้อย่างง่ายดาย ไคลเอนต์ต้องผ่านกระบวนการจับมือ HTTP ที่เข้ากันได้ หากทำได้สำเร็จเซิร์ฟเวอร์และไคลเอ็นต์สามารถแลกเปลี่ยนข้อมูลในทั้งสองทิศทางได้ตลอดเวลา จะมีประสิทธิภาพหากแอปพลิเคชันต้องการการแลกเปลี่ยนข้อมูลบ่อยครั้ง WebSockets มีการทำ data data ซึ่งรวมถึงการปิดบังสำหรับแต่ละข้อความที่ส่งจากไคลเอ็นต์ไปยังเซิร์ฟเวอร์ดังนั้นข้อมูลจึงถูกเข้ารหัส
แผนภูมิสนับสนุน (ดีมาก) | วิกิพีเดีย
WebRTC - ↔peer
peer
ขนส่งเพื่อสร้างการสื่อสารระหว่างลูกค้าและเป็นผู้ขนส่งที่ไม่เชื่อเรื่องพระเจ้าดังนั้นจึงสามารถใช้ UDP, TCP หรือเลเยอร์นามธรรมได้มากขึ้น โดยทั่วไปจะใช้สำหรับการถ่ายโอนข้อมูลปริมาณมากเช่นการสตรีมวิดีโอ / เสียงที่ความน่าเชื่อถือเป็นรองและไม่กี่เฟรมหรือการลดลงของความก้าวหน้าด้านคุณภาพสามารถเสียสละในเวลาตอบสนองและอย่างน้อยการถ่ายโอนข้อมูลบางอย่าง ทั้งสองด้าน (เพื่อนร่วมงาน) สามารถส่งข้อมูลให้กันและกันได้อย่างอิสระ แม้ว่าจะสามารถใช้งานได้อย่างอิสระโดยสิ้นเชิงจากเซิร์ฟเวอร์รวมศูนย์ แต่ก็ยังต้องการวิธีการแลกเปลี่ยนข้อมูลจุดปลายซึ่งในกรณีส่วนใหญ่ผู้พัฒนายังคงใช้เซิร์ฟเวอร์ส่วนกลางเพื่อเชื่อมโยง "เพื่อน" สิ่งนี้จำเป็นสำหรับการแลกเปลี่ยนข้อมูลที่จำเป็นสำหรับการสร้างการเชื่อมต่อหลังจากนั้นไม่จำเป็นต้องใช้เซิร์ฟเวอร์ส่วนกลาง
แผนภูมิการสนับสนุน (กลาง) | วิกิพีเดีย
เซิร์ฟเวอร์ส่งเหตุการณ์ - ←client
server
ลูกค้าสร้างการเชื่อมต่อกับเซิร์ฟเวอร์แบบถาวรและระยะยาว มีเพียงเซิร์ฟเวอร์เท่านั้นที่สามารถส่งข้อมูลไปยังลูกค้าได้ หากลูกค้าต้องการส่งข้อมูลไปยังเซิร์ฟเวอร์ก็จะต้องใช้เทคโนโลยี / โปรโตคอลอื่นให้ทำเช่นนั้น โปรโตคอลนี้เข้ากันได้กับ HTTP และใช้งานง่ายในแพลตฟอร์มฝั่งเซิร์ฟเวอร์ส่วนใหญ่ นี่เป็นโปรโตคอลที่นิยมใช้มากกว่าการใช้ Long Polling สนับสนุนแผนภูมิ (ดียกเว้น IE) | วิกิพีเดีย
ข้อดี:
ข้อได้เปรียบหลักของฝั่งเซิร์ฟเวอร์WebSocketsคือไม่ใช่คำขอ HTTP (หลังจากจับมือกัน) แต่เป็นโปรโตคอลการสื่อสารที่ใช้ข้อความที่เหมาะสม สิ่งนี้ช่วยให้คุณบรรลุผลการดำเนินงานและข้อได้เปรียบทางสถาปัตยกรรมที่ยิ่งใหญ่ ตัวอย่างเช่นใน node.js คุณสามารถแบ่งปันหน่วยความจำเดียวกันสำหรับการเชื่อมต่อซ็อกเก็ตที่แตกต่างกันดังนั้นพวกเขาจึงสามารถเข้าถึงตัวแปรที่แชร์กันได้ ดังนั้นคุณไม่จำเป็นต้องใช้ฐานข้อมูลเป็นจุดแลกเปลี่ยนตรงกลาง (เช่น AJAX หรือ Long Polling ด้วยภาษาเช่น PHP) คุณสามารถจัดเก็บข้อมูลใน RAM หรือเผยแพร่ระหว่างซ็อกเก็ตได้ทันที
ข้อควรพิจารณาด้านความปลอดภัย
ผู้คนมักจะกังวลเกี่ยวกับความปลอดภัยของ WebSockets ความจริงก็คือมันสร้างความแตกต่างเพียงเล็กน้อยหรือทำให้ WebSockets เป็นตัวเลือกที่ดีกว่า ก่อนอื่นด้วย AJAX มีโอกาสสูงที่MITMเนื่องจากการร้องขอแต่ละครั้งเป็นการเชื่อมต่อ TCP ใหม่ที่ผ่านโครงสร้างพื้นฐานอินเทอร์เน็ต ด้วย WebSockets เมื่อเชื่อมต่อแล้วจะมีความท้าทายในการสกัดกั้นระหว่างกันมากขึ้นโดยมีการปิดเฟรมเพิ่มเติมเมื่อข้อมูลถูกส่งจากไคลเอนต์ไปยังเซิร์ฟเวอร์รวมถึงการบีบอัดเพิ่มเติมซึ่งต้องใช้ความพยายามในการสอบสวนข้อมูล โปรโตคอลที่ทันสมัยทั้งหมดรองรับทั้ง: HTTP และ HTTPS (เข้ารหัส)
PS
โปรดจำไว้ว่าโดยทั่วไปแล้ว WebSockets จะมีวิธีการทางตรรกะที่แตกต่างกันมากเช่นในเกมแบบเรียลไทม์ซึ่งมีอยู่ตลอดเวลาและไม่ชอบ http