statusのsend_fail原因

現象:

statusコマンドを実行すると、send_failの状況が見られますが、これは何が原因ですか?

答:

send_failは通常大きな問題ではなく、一般的にはクライアントが接続を自発的に閉じたり、クライアントがデータを受け取れないためにデータの送信に失敗することが原因です。

send_failには2つの理由があります。

1、sendインターフェースを呼び出してクライアントにデータを送信しようとした際に、クライアントがすでに切断されている場合、send_failカウントが1増加します。これはクライアントが自発的に切断した場合であり、正常な現象なので通常は無視しても問題ありません。

2、サーバーからのデータ送信速度がクライアントの受信速度を上回ると、データがサーバーのバッファに蓄積され続けます(workermanは各クライアントに送信バッファを設けています)。バッファのサイズが限界を超えると(TcpConnection::$maxSendBufferSizeのデフォルトは1M)、データは破棄され、onErrorイベントがトリガーされ(もしあれば)、send_failカウントが1増加します。

たとえば、ブラウザが最小化された場合、jsの実行が一時停止し、ブラウザがサーバーデータの受信を停止する可能性があります。データがバッファに長時間蓄積され、制限を超えると、毎回sendを呼び出すたびにsend_failカウントが1増加します。

まとめ:

クライアントの切断によるsend_failは一般的には心配する必要はありません。

クライアントがデータの受信を停止したためにsend_failが発生した場合、クライアントが正常であるかどうかを確認する必要があります。

クライアントの受信速度が持続的にサーバーの送信速度よりも低い場合は、ビジネスプロセスの最適化、またはクライアントのパフォーマンスの最適化を検討する必要があります。帯域幅が原因で送信がスムーズでない場合は、サーバーの帯域幅を増加させることを検討できます。