Сбой при запуске Workerman

Феномен 1

После запуска возникает ошибка, похожая на следующую:

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

Ключевое слово: Address already in use

Основная причина: Порт занят, не удается запустить.

Решение 1

Можно использовать команду netstat -anp | grep номер_порта для нахождения программы, занимающей порт.
Затем остановите соответствующую программу, чтобы освободить порт.

Решение 2

Если нельзя остановить программу, занимающую порт, можно решить проблему, изменив порт Workerman.

Решение 3

Если порт занят самим Workerman и его нельзя остановить командой stop (обычно это происходит из-за отсутствия файла pid или если основной процесс был завершен разработчиком), вы можете выполнить следующие две команды, чтобы завершить процесс Workerman.

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

Решение 4

Если действительно нет программы, прослушивающей этот порт, возможно, разработчик настроил в Workerman два или более слушателей с одинаковым портом, что вызывает конфликт. Пожалуйста, проверьте, не слушает ли один из скриптов тот же самый порт.

Решение 5

Проверьте, включен ли в программе параметр reusePort, попробуйте отключить его.

Феномен 2

После запуска возникает ошибка, похожая на следующую:

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

или

PHP Warning:  stream_socket_server(): unable to connect to tcp://xx.xx.xx.xx:xxxx (Указанный адрес недействителен в этом контексте) in ...workerman/Worker.php on line xxxx

Ключевое слово: Cannot assign requested address или Указанный адрес недействителен

Причина сбоя:

Ошибка в параметре ip в скрипте запуска, указан неверный ip-адрес, не соответствующий локальному. Укажите локальный ip-адрес или укажите 0.0.0.0 (что означает прослушивание всех ip-адресов на локальном сервере).

Подсказка: В системе Linux можно использовать команду ifconfig, чтобы просмотреть все ip-адреса локальных сетевых интерфейсов.
Если вы используете облачный сервер (например, Alibaba Cloud / Tencent Cloud), учитывайте, что ваш общедоступный ip может быть прокси-адресом (например, в приватной сети Alibaba Cloud), и он не принадлежит текущему серверу, поэтому вы не сможете прослушивать по общедоступному ip. Хотя вы не можете прослушивать по общедоступному ip, вы можете привязаться через 0.0.0.0.

Феномен 3

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

Причина сбоя:

Функция stream_socket_server отключена в php.ini.

Решение

  1. Выполните php --ini, чтобы найти файл php.ini.

  2. Откройте php.ini, найдите пункт disable_functions и удалите из него stream_socket_server.

Феномен 4

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

Причина сбоя

Для прослушивания порта в Linux, если он меньше 1024, требуются права root.

Решение

Используйте порт больше 1024 или запустите службу от имени пользователя root.