workerman啟動失敗
現(xiàn)象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
失敗原因:
端口被占用,無法啟動。
可以通過命令netstat -anp | grep 端口號來找出哪個程序占用了端口。
然后停止對應的程序釋放端口解決。
如果不能停止對應端口的程序,可以通過更換workerman的端口解決。
如果是Workerman占用的端口,又無法通過stop命令停止(一般是丟失pid文件或者主進程被開發(fā)者kill了導致),可以通過運行以下兩個命令殺死Workerman進程。
killall?php ps?aux|grep?WorkerMan|awk?'{print?$2}'|xargs?kill?-9
如果確實沒有程序監(jiān)聽這個端口,那么可能是開發(fā)者在workerman里設置了兩個或兩個以上的監(jiān)聽,并且監(jiān)聽的端口相同導致,請開發(fā)者自行檢查啟動腳本是否監(jiān)聽了相同的端口。
現(xiàn)象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或者該請求的地址無效
失敗原因:
啟動腳本監(jiān)聽ip參數(shù)寫錯,不是本機ip,請?zhí)顚懕緳Cip機或者填寫 0.0.0.0(表示監(jiān)聽本機所有ip)即可解決。
提示:linux系統(tǒng)可以通過命令 ifconfig查看本機所有網(wǎng)卡ip。
如果您是云服務器(阿里云/騰訊云等)用戶,注意您的公網(wǎng)ip實際可能是個代理ip(例如阿里云的專有網(wǎng)絡),公網(wǎng)ip并不屬于當前的服務器,所以無法通過公網(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、運行php –ini 找到php.ini文件
2、打開php.ini找到disable_functions一項,將stream_socket_server禁用項刪掉
現(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權限。
解決辦法
使用大于1024的端口或者使用root用戶啟動服務。
推薦:workerman