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用户启动服务。