avvio di workerman non riuscito

Fenomeno 1

Dopo l'avvio si verifica un errore simile al seguente:

php start.php start
PHP Warning:  stream_socket_server(): unable to connect to tcp://xx.xx.xx.xx:xxxx (Address already in use) in ...workerman/Worker.php on line xxxx

Parola chiave: Address already in use

Causa principale: La porta è occupata e non può essere avviata.

Soluzione 1

Puoi utilizzare il comando netstat -anp | grep numero_porta per individuare quale programma sta occupando la porta.
Poi interrompi il programma corrispondente per liberare la porta.

Soluzione 2

Se non puoi interrompere il programma sulla porta corrispondente, puoi risolvere cambiando la porta di workerman.

Soluzione 3

Se la porta è occupata da Workerman e non riesci a fermare il processo tramite il comando stop (di solito è dovuto alla perdita del file pid o al fatto che il processo principale è stato terminato dallo sviluppatore), puoi eseguire i seguenti due comandi per terminare il processo Workerman.

killall php
ps aux|grep -i workerman|awk '{print $2}'|xargs kill -9

Soluzione 4

Se non ci sono programmi che ascoltano su questa porta, potrebbe essere che lo sviluppatore abbia configurato workerman per ascoltare su due o più porte con lo stesso numero, quindi si prega di controllare se lo script di avvio sta ascoltando sulla stessa porta.

Soluzione 5

Controlla se il programma ha abilitato reusePort, prova a disabilitare reusePort.

Fenomeno 2

Dopo l'avvio si verifica un errore simile al seguente:

PHP Warning:  stream_socket_server(): unable to connect to tcp://xx.xx.xx.xx:xxx (Cannot assign requested address) 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

Parola chiave: Cannot assign requested address oppure l'indirizzo richiesto non è valido

Causa del fallimento:

L'argomento ip dello script di avvio è stato scritto erroneamente, non è l'ip della macchina locale; si prega di inserire l'ip della macchina locale o di inserire 0.0.0.0 (che significa ascoltare su tutti gli ip locali).

Suggerimento: Su sistemi Linux, puoi utilizzare il comando ifconfig per visualizzare tutti gli ip delle schede di rete locali.
Se sei un utente di un server cloud (come Alibaba Cloud / Tencent Cloud), fai attenzione che il tuo ip pubblico potrebbe in realtà essere un ip proxy (ad esempio la rete dedicata di Alibaba Cloud), quindi l'ip pubblico non appartiene al server attuale e non può essere usato per l'ascolto. Anche se non puoi ascoltare su un ip pubblico, puoi comunque legare su 0.0.0.0.

Fenomeno 3

Waring stream_socket_server has been disabled for security reasons in ...

Causa del fallimento:

La funzione stream_socket_server è stata disabilitata nel php.ini

Metodo di risoluzione

  1. Esegui php --ini per trovare il file php.ini

  2. Apri php.ini e trova la voce disable_functions, rimuovi stream_socket_server dall'elenco delle funzioni disabilitate.

Fenomeno 4

PHP Warning:  stream_socket_server(): unable to connect to tcp://0.0.0.0:xxx (Permission denied)

Causa del fallimento

Su Linux, per ascoltare su una porta inferiore a 1024, sono necessari i permessi di root.

Soluzione

Utilizza una porta maggiore di 1024 oppure avvia il servizio come utente root.