ฉันมีแอปพลิเคชันไคลเอ็นต์/เซิร์ฟเวอร์ที่ใช้ nodejs บนเซิร์ฟเวอร์และ socket.io เป็นกลไกการเชื่อมต่อ ด้วยเหตุผลที่เกี่ยวข้องกับแอปพลิเคชันของฉัน ฉันต้องการให้มีเพียงการเชื่อมต่อที่ใช้งานอยู่ต่อเบราว์เซอร์เท่านั้น และปฏิเสธการเชื่อมต่อทั้งหมดจากแท็บอื่นที่อาจเปิดในภายหลังระหว่างเซสชัน สิ่งนี้ใช้งานได้ดีกับ WebSockets แต่ถ้าเบราว์เซอร์ไม่รองรับ WebSockets และใช้ XHR-polling แทน การตัดการเชื่อมต่อจะไม่เกิดขึ้น ดังนั้นหากผู้ใช้เพียงแค่รีเฟรชหน้า สิ่งนี้จะไม่ถูกตีความว่าเป็นการเชื่อมต่อใหม่ ( ฉันมีความล่าช้าสำหรับ การเชื่อมต่อใหม่และการกู้คืนเซสชัน) แต่เป็นแท็บใหม่ ซึ่งสิ้นสุดในการเชื่อมต่อที่ถูกปฏิเสธเนื่องจากการเชื่อมต่อเก่าที่ทำโดยแท็บเดียวกันนี้ยังคงทำงานอยู่
ฉันกำลังมองหาวิธียุติการเชื่อมต่อจากไคลเอนต์อย่างมีประสิทธิภาพทุกครั้งที่มีการรีเฟรชเกิดขึ้น ฉันได้ลองผูกเข้ากับ beforeunload
และเรียก socket.disconnect()
ทางฝั่งไคลเอ็นต์แล้ว และยังส่งข้อความเช่น socket.emit('force-disconnect')
และทำให้เกิดการตัดการเชื่อมต่อจากเซิร์ฟเวอร์โดยไม่สำเร็จ ฉันพลาดอะไรไปที่นี่หรือเปล่า? ขอบคุณที่คุณช่วย!
ฉันได้อ่านคำถามนี้แล้ว และทำได้ ไม่พบว่ามีประโยชน์สำหรับกรณีเฉพาะของฉัน