ฉันกำลังพัฒนาเซิร์ฟเวอร์ TCP echo โดยใช้ python และ socket library
ฉันต้องการกำหนดค่าการหมดเวลาสำหรับการเชื่อมต่อขาเข้าแต่ละครั้ง ดังนั้นให้วางและปิดหากไม่มีการใช้งานสำหรับ SOCK_TIMEOUT
ค่า.
สิ่งนี้ทำได้ด้วยการตั้งค่าเฉพาะ: client_sock.settimeout (SOCK_TIMEOUT)
ในเวลาเดียวกันฉันต้องการรักษาการเชื่อมต่อที่ใช้วิธี Keepaliveดังนั้น หากเซิร์ฟเวอร์ได้รับแพ็กเก็ต Keepalive Probe จากไคลเอ็นต์ที่ระบุ ฉันต้องการหลีกเลี่ยงการใช้การหมดเวลาเพื่อปิดไคลเอ็นต์/การเชื่อมต่อเฉพาะนี้
ชี้แจงปัญหา>> ฉันต้องการให้เซิร์ฟเวอร์หยุดการเชื่อมต่อทุกครั้งหลังจากไม่มีการใช้งานเป็นเวลา 3 นาที สิ่งนี้สำเร็จได้ด้วย หมดเวลา (SOCK_TIMEOUT)
การทำงาน. ปัญหาหลักคือการกำหนดค่าปัจจุบันและการนำซ็อกเก็ต TCP ไปใช้ไม่ได้ถือว่าโพรบ Keep-alive เป็น "กิจกรรม" ดังนั้น การเชื่อมต่อจึงถูกปิดแม้ว่าจะรับทราบโพรบแล้วก็ตาม
Q1 >> สิ่งนี้สมเหตุสมผลหรือไม่?
ฉันจะบอกว่าสิ่งนี้ควรจะเป็นไปได้ อย่างไรก็ตาม เซิร์ฟเวอร์ซ็อกเก็ตไม่สามารถจัดการโพรบ Keepalive ตามที่ฉันต้องการได้ เนื่องจากแม้ว่าเซิร์ฟเวอร์จะรับทราบ ACK จะถูกส่งกลับไปยังแต่ละโพรบ การเชื่อมต่อจะปิดเมื่อหมดเวลา
คำถามที่ 2 >> ฉันควรเปลี่ยนการใช้งานระยะหมดเวลาหรือไม่