Fallo en el inicio de Workerman

Fenómeno 1

Al iniciar, muestra un error similar a lo siguiente:

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

Palabra clave: Address already in use

Causa raíz: El puerto está en uso y no se puede iniciar.

Solución 1

Puede encontrar qué programa está usando el puerto ejecutando el comando netstat -anp | grep número_de_puerto.
Luego, detenga el programa correspondiente para liberar el puerto y resolver el problema.

Solución 2

Si no puede detener el programa en el puerto correspondiente, puede resolver el problema cambiando el puerto de Workerman.

Solución 3

Si es un puerto ocupado por Workerman y no puede detenerlo a través del comando stop (generalmente se debe a que se ha perdido el archivo pid o el proceso principal fue terminado por el desarrollador), puede matar el proceso de Workerman ejecutando los siguientes dos comandos.

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

Solución 4

Si realmente no hay ningún programa escuchando en ese puerto, es posible que el desarrollador haya configurado Workerman para escuchar en dos o más lugares y que estén utilizando el mismo puerto, por favor, verifique si el script de inicio está escuchando en el mismo puerto.

Solución 5

Verifique si el programa ha habilitado reusePort, intente deshabilitar reusePort.

Fenómeno 2

Al iniciar, muestra un error similar a lo siguiente:

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

o

PHP Warning:  stream_socket_server(): unable to connect to tcp://xx.xx.xx.xx:xxxx (在其上下文中,该请求的地址无效) in ...workerman/Worker.php on line xxxx

Palabras clave: Cannot assign requested address o 该请求的地址无效

Causa del fallo:

La dirección IP escrita en el parámetro de escucha del script de inicio es incorrecta, no es la IP de la máquina local. Por favor, ingrese la IP de la máquina local o escriba 0.0.0.0 (que indica que escucha en todas las IPs de la máquina local) para solucionar el problema.

Nota: En sistemas Linux, puede usar el comando ifconfig para ver todas las IPs de la interfaz de red de la máquina local.
Si usted es un usuario de servidores en la nube (Alibaba Cloud/Tencent Cloud, etc.), tenga en cuenta que su IP pública puede ser una IP de proxy (por ejemplo, la red privada de Alibaba Cloud), la IP pública no pertenece al servidor actual, por lo que no se puede escuchar en la IP pública. Aunque no se puede usar la IP pública para escuchar, aún se puede vincular con 0.0.0.0.

Fenómeno 3

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

Causa del fallo:

La función stream_socket_server está desactivada en php.ini

Método de solución

  1. Ejecute el comando php --ini para encontrar el archivo php.ini

  2. Abra php.ini y encuentre la opción disable_functions, elimine la función stream_socket_server de la lista de funciones desactivadas.

Fenómeno 4

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

Causa del fallo

En Linux, para escuchar en un puerto menor a 1024, se requieren permisos de root.

Método de solución

Utilice un puerto mayor a 1024 o inicie el servicio como usuario root.