Falha ao iniciar o Workerman
Fenômeno 1
Após iniciar, aparece um erro semelhante ao seguinte:
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
Palavra-chave: Address already in use
Causa Fundamental: A porta está ocupada, não é possível iniciar.
Solução 1
Você pode usar o comando netstat -anp | grep número da porta para descobrir qual programa está ocupando a porta.
Em seguida, pare o programa correspondente para liberar a porta.
Solução 2
Se não for possível parar o programa que está usando a porta, você pode resolver mudando a porta do workerman.
Solução 3
Se a porta é ocupada pelo Workerman e não puder ser parada com o comando stop (geralmente porque o arquivo pid foi perdido ou o processo principal foi encerrado pelo desenvolvedor), você pode executar os seguintes dois comandos para matar o processo do Workerman.
killall php
ps aux|grep -i workerman|awk '{print $2}'|xargs kill -9
Solução 4
Se realmente não houver programas escutando nessa porta, pode ser que o desenvolvedor tenha configurado o Workerman para escutar em duas ou mais instâncias na mesma porta, por isso, o desenvolvedor deve verificar se o script de inicialização está tentando escutar na mesma porta.
Solução 5
Verifique se o programa está com o reusePort ativado, desative o reusePort e tente novamente.
Fenômeno 2
Após iniciar, aparece um erro semelhante ao seguinte:
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
ou
PHP Warning: stream_socket_server(): unable to connect to tcp://xx.xx.xx.xx:xxxx (在其上下文中,该请求的地址无效) in ...workerman/Worker.php on line xxxx
Palavra-chave: Cannot assign requested address ou 该请求的地址无效
Causa da Falha:
O parâmetro de IP do script de inicialização está escrito incorretamente, não é o IP da máquina local, por favor, insira o IP da máquina local ou insira 0.0.0.0 (que representa escutar em todos os IPs da máquina local) para resolver.
Dica: No sistema Linux, você pode usar o comando ifconfig para ver todos os IPs das interfaces da máquina local.
Se você é um usuário de servidor em nuvem (Alibaba Cloud/Tencent Cloud, etc.), tenha em mente que seu IP público pode ser um IP de proxy (como a rede exclusiva da Alibaba Cloud), o IP público não pertence ao servidor atual, portanto, não pode escutar através do IP público. Embora não seja possível escutar pelo IP público, ainda é possível vincular usando 0.0.0.0.
Fenômeno 3
Waring stream_socket_server has been disabled for security reasons in ...
Causa da Falha:
A função stream_socket_server foi desabilitada no php.ini.
Método de Resolução
-
Execute
php --inipara encontrar o arquivo php.ini. -
Abra o php.ini e encontre a opção disable_functions, removendo a função stream_socket_server da lista de desabilitados.
Fenômeno 4
PHP Warning: stream_socket_server(): unable to connect to tcp://0.0.0.0:xxx (Permission denied)
Causa da Falha
Ao escutar em uma porta menor que 1024 no Linux, é necessário ter permissões de root.
Método de Resolução
Use uma porta maior que 1024 ou inicie o serviço como usuário root.