workerman khởi động thất bại
Hiện tượng 1
Khởi động sau báo lỗi như sau:
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
Từ khóa: Address already in use
Nguyên nhân chính: Cổng đã bị chiếm dụng, không thể khởi động.
Giải pháp 1
Có thể sử dụng lệnh netstat -anp | grep port number để tìm ra chương trình nào đã chiếm dụng cổng.
Sau đó dừng chương trình tương ứng để giải phóng cổng.
Giải pháp 2
Nếu không thể dừng chương trình đang sử dụng cổng, có thể thay đổi cổng của workerman để giải quyết.
Giải pháp 3
Nếu là cổng mà Workerman đang sử dụng, và không thể dừng bằng lệnh stop (thường do mất file pid hoặc quá trình chính bị lập trình viên kill), có thể chạy hai lệnh sau để giết quá trình Workerman.
killall php
ps aux|grep -i workerman|awk '{print $2}'|xargs kill -9
Giải pháp 4
Nếu thực sự không có chương trình nào lắng nghe cổng này, có thể là do lập trình viên đã thiết lập nhiều hơn hai lắng nghe trong workerman và các cổng lắng nghe giống nhau, vui lòng kiểm tra lại xem script khởi động có lắng nghe cổng giống nhau hay không.
Giải pháp 5
Kiểm tra xem chương trình có bật reusePort hay không, thử tắt reusePort xem sao.
Hiện tượng 2
Khởi động sau báo lỗi như sau:
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
hoặc
PHP Warning: stream_socket_server(): unable to connect to tcp://xx.xx.xx.xx:xxxx (在其上下文中,该请求的地址无效) in ...workerman/Worker.php on line xxxx
Từ khóa: Cannot assign requested address hoặc 该请求的地址无效
Nguyên nhân thất bại:
Tham số ip trong script khởi động đã được viết sai, không phải ip của máy. Vui lòng nhập địa chỉ ip của máy hoặc viết 0.0.0.0 (đại diện cho lắng nghe tất cả địa chỉ ip của máy) để giải quyết.
Lưu ý: Hệ thống Linux có thể sử dụng lệnh ifconfig để xem tất cả ip của card mạng máy.
Nếu bạn là người dùng máy chủ đám mây (Alibaba Cloud / Tencent Cloud, v.v.), hãy lưu ý rằng ip công cộng của bạn có thể thực sự là ip proxy (ví dụ như mạng riêng của Alibaba Cloud), ip công cộng không thuộc về máy chủ hiện tại, vì vậy không thể lắng nghe qua ip công cộng. Mặc dù không thể lắng nghe qua ip công cộng, nhưng bạn vẫn có thể liên kết qua 0.0.0.0.
Hiện tượng 3
Waring stream_socket_server has been disabled for security reasons in ...
Nguyên nhân thất bại:
Hàm stream_socket_server đã bị vô hiệu hóa trong php.ini
Phương pháp giải quyết
-
Chạy
php --iniđể tìm file php.ini -
Mở php.ini và tìm mục disable_functions, xóa dòng stream_socket_server khỏi danh sách.
Hiện tượng 4
PHP Warning: stream_socket_server(): unable to connect to tcp://0.0.0.0:xxx (Permission denied)
Nguyên nhân thất bại
Trong Linux, nếu lắng nghe cổng dưới 1024, cần có quyền root.
Cách giải quyết
Sử dụng cổng lớn hơn 1024 hoặc sử dụng người dùng root để khởi động dịch vụ.