สถานะข้อผิดพลาดการส่งใน status

ลักษณะ:

การดูคำสั่ง status พบกับสถานะการส่งที่เกิดข้อผิดพลาด (send_fail) มีสาเหตุอะไร?

คำตอบ:

สถานะ send_fail ทั่วไปมักจะไม่ใช่ปัญหาใหญ่ โดยทั่วไปจะเกิดจากการปิดการเชื่อมต่อของไคลเอ็นต์อย่างสมัครใจหรือไม่สามารถรับข้อมูลจากเซิร์ฟเวอร์ทำให้การส่งข้อมูลล้มเหลว

สาเหตุของ send_fail มี 2 กรณี

  1. เรียกใช้ send interface สำหรับการส่งข้อมูลไปยังไคลเอ็นต์พบว่าไคลเอ็นต์ตัดการเชื่อมต่อไปแล้ว จึงเพิ่มการนับ send_fail ขึ้น โดยเนื่องจากการตัดการเชื่อมต่อของไคลเอ็นต์ เป็นปกติ โดยทั่วไปสามารถละเว้นไปได้

  2. ความเร็วในการส่งข้อมูลจากเซิร์ฟเวอร์สูงกว่าความเร็วในการรับข้อมูลของไคลเอ็นต์ทำให้ข้อมูลสะสมอยู่ในบัฟเฟอร์ของเซิร์ฟเวอร์ (workerman สร้างบัฟเฟอร์สำหรับส่งข้อมูลสำหรับแต่ละไคลเอ็นต์) หากขนาดของบัฟเฟอร์เกินขีดจำกัด (TcpConnection::$maxSendBufferSize ค่าเริ่มต้นคือ 1M) ข้อมูลจะถูกทิ้งไป กระตุ้นเหตุการณ์ onError (หากมี) และทำให้การนับ send_fail เพิ่มขึ้น

เช่น เมื่อเบราว์เซอร์ขนาดเล็กลงมาจากนั้น Javascript อาจหยุดทำงาน ทำให้เบราว์เซอร์ไม่ได้รับข้อมูลจากเซิร์ฟเวอร์ ข้อมูลสะสมอยู่ในบัฟเฟอร์เป็นเวลานาน ก่อนที่จะเกินการจำกัด การเรียกใช้ send ทุกรายทำให้การนับ send_fail เพิ่มขึ้น

สรุป:

สถานะ send_fail ที่เกิดจากการตัดการเชื่อมต่อของไคลเอ็นต์ โดยทั่วไปไม่ต้องกังกาจ

หากเกิดการ send_fail จากการหยุดการรับข้อมูลของไคลเอ็นต์ ต้องตรวจสอบไคลเอ็นต์ว่าปกติหรือไม่

หากความเร็วในการรับข้อมูลของไคลเอ็นต์ ต่อเนื่อง ลดลงต่ำกว่าความเร็วในการส่งของเซิร์ฟเวอร์ จำเป็นต้องพิจารณาให้ระเบียบกระบวนการทางธุรกิจหรือปรับปรุงประสิทธิภาพของไคลเอ็นต์ หากเป็นเรื่องแบนด์วิดท์ทำให้ส่งข้อมูลไม่ดี สามารถพิจารณาเพิ่มแบนด์วิดท์ของเซิร์ฟเวอร์ได้