workerman啟動(dòng)失敗
現(xiàn)象1
啟動(dòng)后報(bào)錯(cuò)類似如下:
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
關(guān)鍵字: Address already in use
根本原因: 端口被占用,無法啟動(dòng)。
解決方案1
可以通過命令netstat -anp | grep 端口號(hào)
來找出哪個(gè)程序占用了端口。
然后停止對(duì)應(yīng)的程序釋放端口解決。
解決方案2
如果不能停止對(duì)應(yīng)端口的程序,可以通過更換workerman的端口解決。
解決方案3
如果是Workerman占用的端口,又無法通過stop命令停止(一般是丟失pid文件或者主進(jìn)程被開發(fā)者kill了導(dǎo)致),可以通過運(yùn)行以下兩個(gè)命令殺死Workerman進(jìn)程。
killall php
ps aux|grep -i workerman|awk '{print $2}'|xargs kill -9
解決方案4
如果確實(shí)沒有程序監(jiān)聽這個(gè)端口,那么可能是開發(fā)者在workerman里設(shè)置了兩個(gè)或兩個(gè)以上的監(jiān)聽,并且監(jiān)聽的端口相同導(dǎo)致,請(qǐng)開發(fā)者自行檢查啟動(dòng)腳本是否監(jiān)聽了相同的端口。
解決方案5
檢查程序是否開啟了reusePort,關(guān)閉reusePort試下。
現(xiàn)象2
啟動(dòng)后報(bào)錯(cuò)類似如下:
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 (在其上下文中,該請(qǐng)求的地址無效) in ...workerman/Worker.php on line xxxx
關(guān)鍵字: Cannot assign requested address
或者該請(qǐng)求的地址無效
失敗原因:
啟動(dòng)腳本監(jiān)聽ip參數(shù)寫錯(cuò),不是本機(jī)ip,請(qǐng)?zhí)顚懕緳C(jī)ip機(jī)或者填寫 0.0.0.0
(表示監(jiān)聽本機(jī)所有ip)即可解決。
提示:Linux系統(tǒng)可以通過命令 ifconfig
查看本機(jī)所有網(wǎng)卡ip。
如果您是云服務(wù)器(阿里云/騰訊云等)用戶,注意您的公網(wǎng)ip實(shí)際可能是個(gè)代理ip(例如阿里云的專有網(wǎng)絡(luò)),公網(wǎng)ip并不屬于當(dāng)前的服務(wù)器,所以無法通過公網(wǎng)ip監(jiān)聽。雖然不能用公網(wǎng)ip監(jiān)聽,但是仍然可以通過0.0.0.0來綁定。
現(xiàn)象3
Waring stream_socket_server has been disabled for security reasons in ...
失敗原因:
stream_socket_server 函數(shù)被php.ini禁用
解決方法
1、運(yùn)行php --ini
找到php.ini文件
2、打開php.ini找到disable_functions一項(xiàng),將stream_socket_server禁用項(xiàng)刪掉
現(xiàn)象4
PHP Warning: stream_socket_server(): unable to connect to tcp://0.0.0.0:xxx (Permission denied)
失敗原因
linux下監(jiān)聽端口如果小于1024,需要root權(quán)限。
解決辦法
使用大于1024的端口或者使用root用戶啟動(dòng)服務(wù)。