สาเหตุของ send_fail ในสถานะ

ปรากฏการณ์:

เมื่อเรียกใช้คำสั่ง status และพบว่ามีสถานะ send_fail สาเหตุคืออะไร?

คำตอบ:

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

สาเหตุของ send_fail มีสองประเภท

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

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

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

สรุป:

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

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

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