Avvio fallito di Workerman
Fenomeno 1
Dopo l'avvio, viene visualizzato un errore simile a quanto segue:
php start.php start
PHP Warning: stream_socket_server(): unable to connect to tcp://xx.xx.xx.xx:xxxx (Indirizzo già in uso) in ...workerman/Worker.php on line xxxx
Parole chiave: Indirizzo già in uso
Cause principali: La porta è già occupata e non può essere avviata.
Soluzione 1
È possibile individuare il programma che sta utilizzando la porta mediante il comando netstat -anp | grep numero_porta
, e quindi arrestarlo per liberare la porta.
Soluzione 2
Se non è possibile arrestare il programma corrispondente alla porta, è possibile risolvere la situazione cambiando la porta di Workerman.
Soluzione 3
Se la porta è occupata da Workerman e non può essere arrestata con il comando "stop" (solitamente a causa della perdita del file pid o dell'uccisione del processo principale da parte dello sviluppatore), è possibile uccidere il processo Workerman eseguendo i seguenti due comandi.
killall php
ps aux|grep -i workerman|awk '{print $2}'|xargs kill -9
Soluzione 4
Se effettivamente nessun programma sta ascoltando su quella porta, potrebbe essere che lo sviluppatore abbia configurato più di un ascolto in Workerman con la stessa porta. Si invita lo sviluppatore a verificare se lo script di avvio sta effettuando più di un ascolto sulla stessa porta.
Soluzione 5
Verificare se il programma ha attivato il riutilizzo della porta (reusePort). Provare a disattivare il riutilizzo della porta.
Fenomeno 2
Dopo l'avvio, viene visualizzato un errore simile a quanto segue:
PHP Warning: stream_socket_server(): unable to connect to tcp://xx.xx.xx.xx:xxx (Impossibile assegnare l'indirizzo richiesto) in ...workerman/Worker.php on line xxxx
oppure
PHP Warning: stream_socket_server(): unable to connect to tcp://xx.xx.xx.xx:xxxx (L'indirizzo richiesto non è valido nel suo contesto) in ...workerman/Worker.php on line xxxx
Parole chiave: Impossibile assegnare l'indirizzo richiesto
o L'indirizzo richiesto non è valido
Cause del fallimento: Errore di scrittura del parametro IP di ascolto nello script di avvio, l'indirizzo non è quello della macchina locale. È necessario inserire l'indirizzo IP della macchina o utilizzare 0.0.0.0
(che indica l'ascolto su tutte le interfacce di rete locali) per risolvere il problema.
Consiglio: Nel sistema Linux è possibile utilizzare il comando ifconfig
per visualizzare tutti gli indirizzi IP delle schede di rete. Se si utilizza un server cloud (come Alibaba Cloud o Tencent Cloud), è importante notare che l'indirizzo IP pubblico potrebbe essere un indirizzo IP proxy e non quello effettivo del server, pertanto non sarà possibile effettuare l'ascolto su tale indirizzo. Tuttavia, è comunque possibile effettuare l'ascolto su tutte le interfacce di rete locali mediante l'utilizzo di 0.0.0.0
.
Fenomeno 3
Attenzione: la funzione stream_socket_server è stata disabilitata per motivi di sicurezza in ...
Cause del fallimento: La funzione stream_socket_server è disabilitata nel file php.ini.
Soluzione:
- Eseguire il comando
php --ini
per individuare il file php.ini. - Aprire il file php.ini, individuare la voce disable_functions e rimuovere l'elemento di disabilitazione di stream_socket_server.
Fenomeno 4
PHP Warning: stream_socket_server(): unable to connect to tcp://0.0.0.0:xxx (Permesso negato)
Cause del fallimento: Su Linux, se si ascolta su una porta inferiore a 1024, è necessario disporre dei privilegi di amministratore (root).
Soluzione: Utilizzare una porta superiore a 1024 oppure avviare il servizio con privilegi di root.