Nguyên nhân send_fail trong status

Hiện tượng:

Khi chạy lệnh status, thấy có trường hợp send_fail, nguyên nhân là gì?

Trả lời:

Có send_fail thường không phải là vấn đề lớn, thông thường do khách hàng chủ động đóng kết nối hoặc khách hàng không thể nhận dữ liệu dẫn đến việc gửi dữ liệu thất bại.

send_fail có hai nguyên nhân

  1. Khi gọi giao diện send để gửi dữ liệu tới khách hàng và phát hiện khách hàng đã ngắt kết nối, thì số đếm send_fail sẽ tăng thêm 1. Do khách hàng chủ động ngắt kết nối, điều này thuộc về hiện tượng bình thường và có thể bỏ qua.

  2. Tốc độ gửi dữ liệu của server lớn hơn tốc độ nhận dữ liệu của khách hàng, dẫn đến dữ liệu liên tục bị dồn lại trong bộ đệm của server (workerman tạo một bộ đệm gửi cho mỗi khách hàng), nếu kích thước của bộ đệm vượt quá giới hạn (TcpConnection::$maxSendBufferSize mặc định là 1M) thì dữ liệu sẽ bị vứt bỏ, kích hoạt sự kiện onError (nếu có) và dẫn đến việc số đếm send_fail tăng thêm 1.

Ví dụ, khi trình duyệt đang ở chế độ thu nhỏ, js có thể tạm dừng hoạt động, dẫn đến việc trình duyệt tạm dừng nhận dữ liệu từ server, dữ liệu tích lũy lâu dài trong bộ đệm, khi vượt quá giới hạn, mỗi lần gọi send sẽ dẫn đến việc số đếm send_fail tăng thêm 1.

Tóm tắt:

Do khách hàng ngắt kết nối dẫn đến send_fail thường không cần lo lắng.

Nếu là do khách hàng dừng nhận dữ liệu dẫn đến send_fail, cần kiểm tra xem khách hàng có đang hoạt động bình thường không.

Nếu tốc độ nhận dữ liệu của khách hàng liên tục thấp hơn tốc độ gửi dữ liệu của server, cần xem xét tối ưu hóa quy trình kinh doanh hoặc cải thiện hiệu suất của khách hàng. Nếu việc gửi không suôn sẻ do băng thông, có thể xem xét tăng băng thông máy chủ.