การเริ่มต้น Workerman ล้มเหลว
ปัญหา 1
หลังจากเริ่มต้น มีข้อผิดพลาดเช่นดังนี้:
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 สาธารณอาจจะไม่ได้อยู่ในเซิร์ฟเวอร์ปัจจุบันของคุณ ดังนั้นจึงไม่สามารถเริ่มต้นได้ แต่อย่างไรก็ตาม คุณยังสามารถเริ่มต้นได้ด้วยการ์วิง 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 เพื่อรันซอฟต์แวร์ของคุณ