WebSocket Ping เทียบกับ TCP Keepalive ผ่านพร็อกซี
เลือกการตรวจสอบความมีชีวิตของคู่ WebSocket แทนการถือว่า TCP socket ที่ยังทำงานอยู่เป็นหลักฐานว่าเส้นทางของแอปพลิเคชันตอบสนอง
TCP socket ที่ยังทำงานอยู่ คู่ WebSocket ที่ตอบสนอง และความคืบหน้าของแอปพลิเคชันที่เป็นประโยชน์ เป็นการสังเกตที่แตกต่างกัน:
| หลักฐาน | สิ่งที่มันยืนยัน |
|---|---|
| ความมีชีวิตในระดับ TCP | เส้นทางขนส่งที่ตรวจสอบตอบสนองในระดับนั้น |
| WebSocket Pong ที่ตรงกัน | คู่ตอบเฟรมควบคุมนั้น |
| การยืนยันจากแอปพลิเคชัน | แอปพลิเคชันยืนยันการดำเนินการภายใต้โปรโตคอลของตนเอง |
พร็อกซีแบบส่งต่อมักรักษาการเชื่อมต่อแยกสำหรับไคลเอนต์และปลายทาง คู่ TCP ของไคลเอนต์คือพร็อกซี ขณะที่ Ping ภายในอุโมงค์ที่สร้างแล้วจะเดินทางไปยังปลายทาง WebSocket
Pong ที่ตรงกัน
โปรโตคอลกำหนดให้ Pong ที่ตอบกลับต้องมีข้อมูลแอปพลิเคชันของ Ping ใช้ความสอดคล้องนั้นเพื่อระบุการตรวจสอบที่ค้างอยู่ Pong ที่ไม่ได้ร้องขอได้รับอนุญาตแต่ไม่ขอการยืนยัน การส่งหลังจากข้อความข้อมูลทุกครั้งให้หลักฐานที่แตกต่าง
ควรใช้กลไก heartbeat ที่ไลบรารีรองรับ JavaScript ในเบราว์เซอร์ต้องการสัญญา heartbeat ของแอปพลิเคชันแทน เลือกช่วงเวลาและเกณฑ์ความล้มเหลวให้เหมาะกับภาระงานและนโยบายเครือข่าย การหยุดชั่วคราวของการจัดตารางหรือ event loop ที่โอเวอร์โหลดอาจพลาดเกณฑ์ที่เข้มงวดโดยไม่ได้ยืนยันว่าเครือข่ายล้มเหลว
ให้ตัวรับทำงานอยู่
ไคลเอนต์ต้องการ I/O ต่อเนื่องเพื่อรับและประมวลผลเฟรมควบคุม การปิดกั้นกลไกนั้นอาจทำให้การขาดแคลนทรัพยากรภายในดูเหมือนการหยุดให้บริการ
Ping สร้างทราฟฟิกในอุโมงค์ แต่ตัวกลางแต่ละตัวตัดสินใจเองว่าสิ่งใดตอบสนองนโยบาย idle ของตน ไม่มี heartbeat ใดรับประกันการป้องกันจากขีดจำกัดอายุการเชื่อมต่อแบบสัมบูรณ์
คู่อาจตอบ Ping ขณะที่แอปพลิเคชันหยุดสร้างการอัปเดต และการสมัครรับที่เงียบอาจมีสุขภาพดี ติดตาม Pong ที่ถูกต้องครั้งล่าสุดและเหตุการณ์แอปพลิเคชันที่มีความหมายแยกจากกันเมื่อทั้งสองสำคัญ เมื่อล้มเหลว ให้เก็บเส้นทาง เวลาที่ผ่านไป และการตรวจสอบที่ค้างอยู่ แล้วปิดหรือกู้คืนผ่านวงจรชีวิตที่รองรับ