Сбой при запуске 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.
Решение
-
Выполните
php --ini, чтобы найти файл php.ini. -
Откройте 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.