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文件或者主进程被开发者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 ของเครื่องโปรดกรอก ip ของเครื่องหรือกรอก 0.0.0.0 (หมายถึงการฟัง ip ทั้งหมดของเครื่อง) ก็สามารถแก้ปัญหาได้

提示:ระบบ Linux สามารถใช้คำสั่ง ifconfig เพื่อตรวจสอบ ip ของการ์ดเครือข่ายทั้งหมดที่มีในเครื่อง
ถ้าคุณเป็นผู้ใช้เซิร์ฟเวอร์บนคลาวด์ (阿里云/腾讯云等) โปรดทราบว่า 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)

失败原因

ในระบบ linux หากฟังพอร์ตที่ต่ำกว่า 1024 จำเป็นต้องใช้ root 权限

解决办法

ใช้พอร์ตที่มากกว่า 1024 หรือใช้ผู้ใช้ root ในการเริ่มต้นบริการ