Causas de send_fail no status
Fenômeno:
Ao executar o comando status, vejo a ocorrência de send_fail. Qual é a razão?
Resposta:
A ocorrência de send_fail geralmente não é um grande problema, normalmente é devido ao cliente fechar a conexão ativamente ou ao cliente não conseguir receber dados, resultando em falhas no envio de dados.
As send_fail têm duas causas principais:
-
Quando se chama a interface send para enviar dados ao cliente e se descobre que o cliente já está desconectado, o contador de send_fail aumenta em 1. Como foi o cliente quem desconectou ativamente, isso é considerado um fenômeno normal e geralmente pode ser ignorado.
-
A velocidade com que o servidor envia dados é maior do que a velocidade com que o cliente recebe, resultando em dados se acumulando no buffer do servidor (o Workerman cria um buffer de envio para cada cliente). Se o tamanho do buffer exceder o limite (TcpConnection::$maxSendBufferSize é, por padrão, 1M), os dados serão descartados, acionando o evento onError (se houver) e fazendo com que o contador de send_fail aumente em 1.
Por exemplo, quando o navegador é minimizado, o JavaScript pode parar de executar, fazendo com que o navegador pause a recepção de dados do servidor. Dados se acumulam no buffer por longos períodos e, ao exceder o limite, cada chamada para send resultará em um aumento do contador de send_fail.
Resumo:
Normalmente, não é preciso se preocupar com send_fail causado pela desconexão do cliente.
Se o send_fail é causado pela parada na recepção de dados pelo cliente, é necessário verificar se o cliente está operando normalmente.
Se a velocidade de recepção de dados do cliente continuamente for inferior à velocidade de envio do servidor, é necessário considerar a otimização do fluxo de trabalho ou a melhoria do desempenho do cliente. Se a largura de banda for a causa da dificuldade no envio, pode-se considerar aumentar a largura de banda do servidor.