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 ในการเริ่มต้นบริการ