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이 사용하는 포트가 중지 명령어로 종료되지 않는 경우(대개 pid 파일이 없거나 개발자가 주 프로세스를 kill했기 때문), 다음 두 명령어를 실행하여 Workerman 프로세스를 죽일 수 있습니다.

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

해결 방법 4

실제로 해당 포트를 모니터링하는 프로그램이 없다면, 개발자가 Workerman에서 두 개 이상의 리스너를 설정했으며, 그 포트가 동일하기 때문에 발생할 수 있습니다. 개발자는 시작 스크립트에서 동일한 포트를 리스닝하고 있는지 확인하십시오.

해결 방법 5

프로그램이 reusePort를 켜고 있는지 확인하고, 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 주소를 입력하거나 0.0.0.0 (모든 IP 리스닝을 의미)으로 입력하시면 해결됩니다.

提示: Linux 시스템에서는 ifconfig 명령어로 본인의 모든 네트워크 카드를 확인할 수 있습니다.
클라우드 서버(알리바바 클라우드/텐센트 클라우드 등) 사용자는 실제 공인 IP가 프록시 IP일 수도 있으므로(예: 알리바바 클라우드의 전용 네트워크), 공인 IP는 현재 서버에 속하지 않으므로 공인 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)

실패 원인

리눅스에서 포트를 1024보다 작게 리스닝하려면 root 권한이 필요합니다.

해결 방법

1024보다 큰 포트를 사용하거나 root 사용자로 서비스를 시작하십시오.