send_failの状況の理由

現象:

statusコマンドを実行し、send_failの状況が見られる場合、その原因は何か?

回答:

通常、send_failが発生することは大きな問題ではありません。一般的には、クライアントが接続を切断したりデータを受信できなかったためにデータ送信が失敗したことが原因です。

send_failの原因は2つあります。

  1. send関数を呼び出したときに、クライアントが既に切断されていることが検出されると、send_failのカウントが1加算されます。これは通常、クライアントが自ら切断したものであり、一般的には無視できます。

  2. サーバー側のデータ送信速度がクライアント側の受信速度を上回るため、データがサーバーのバッファ(workermanは各クライアントに送信バッファを作成しています)に溜まり続け、バッファサイズが制限値(TcpConnection::$maxSendBufferSizeはデフォルトで1M)を超えると、データが破棄され、onErrorイベントが発生し(存在する場合)、send_failのカウントが1加算されます。

たとえば、ウェブブラウザが最小化されると、JavaScriptが一時停止され、サーバーからのデータの受信も停止する可能性があり、データがバッファに長時間たまるため、制限を超えるとsend_failのカウントが毎回1加算されます。

まとめ:

クライアントが接続を切断したことによるsend_failについては通常心配する必要はありません。

クライアントがデータを受信停止したことによるsend_failについては、クライアントが正常かどうかを確認する必要があります。

サーバー側の送信速度が持続的にクライアントの受信速度を下回る場合、ビジネスプロセスの最適化やクライアントのパフォーマンスの最適化を検討する必要があります。帯域幅の問題による送信の滞りがある場合は、サーバーの帯域幅を増やすことを検討してください。