Motivo del fallimento dell'invio nello stato
Sintomo:
Eseguendo il comando status
, si nota la presenza di situazioni di send_fail
. Qual è la ragione di ciò?
Risposta:
In genere, il send_fail
non è un grosso problema e di solito è causato dalla chiusura attiva della connessione da parte del client o dall'incapacità del client di ricevere i dati, che porta al fallimento dell'invio dei dati.
Ci sono due ragioni per il send_fail
:
-
Quando si usa l'interfaccia
send
per inviare dati al client e si scopre che il client è disconnesso, il contatore disend_fail
aumenta di 1. Poiché si tratta di una disconnessione attiva del client, è considerato un comportamento normale e di solito può essere ignorato. -
La velocità di invio dei dati dal server è superiore alla velocità di ricezione del client, il che porta all'accumulo continuo dei dati nel buffer di invio del server (workerman stabilisce un buffer di invio per ciascun client). Se la dimensione del buffer supera il limite (di default,
TcpConnection::$maxSendBufferSize
è 1 MB), i dati saranno scartati, attivando l'eventoonError
(se presente) e aumentando il contatore disend_fail
.
Ad esempio, se si riduce al minimo il browser, JavaScript potrebbe sospendere l'esecuzione, causando la pausa nella ricezione dei dati dal server. Se i dati si accumulano nel buffer per un lungo periodo, superando il limite, ogni chiamata a send
aumenterà il contatore di send_fail
.
Conclusione:
Di solito non c'è bisogno di preoccuparsi del send_fail
causato dalla disconnessione del client.
Se il send_fail
è causato dalla lentezza del client nel ricevere i dati, è necessario verificare lo stato del client.
Se la velocità di ricezione del client è costantemente inferiore rispetto alla velocità di invio del server, è necessario valutare l'ottimizzazione del flusso di lavoro o delle prestazioni del client. Se il problema è legato alla larghezza di banda, si può considerare l'aumento della larghezza di banda del server.