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

วิธีแก้ปัญหา

  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 เพื่อรันซอฟต์แวร์ของคุณ