您好,登錄后才能下訂單哦!
這篇文章主要介紹workerman無法socket的解決方法,文中介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們一定要看完!
workerman無法socket怎么辦?
Workerman是一款純PHP開發(fā)的開源高性能的PHP socket 服務(wù)器框架。被廣泛的用于手機(jī)app、手游服務(wù)端、網(wǎng)絡(luò)游戲服務(wù)器、聊天室服務(wù)器、硬件通訊服務(wù)器、智能家居、車聯(lián)網(wǎng)、物聯(lián)網(wǎng)等領(lǐng)域的開發(fā)。但是在配置workerman情況下,不免有些意想不到的錯(cuò)誤,下面小編整理網(wǎ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 /home/workerman-chat/Workerman/Worker.php on line xxxx
關(guān)鍵字: Address already in use
失敗原因:
端口被占用,無法啟動(dòng)。
可以通過命令netstat -anp | grep 端口號(hào)來找出哪個(gè)程序占用了端口。
然后停止對(duì)應(yīng)的程序釋放端口解決。
如果不能停止對(duì)應(yīng)端口的程序,可以通過更換workerman的端口解決。
如果是Workerman占用的端口,又無法通過stop命令停止(一般是丟失pid文件或者主進(jìn)程被開發(fā)者kill了導(dǎo)致),可以通過運(yùn)行以下兩個(gè)命令殺死Workerman進(jìn)程。
killall php ps aux|grep WorkerMan|awk '{print $2}'|xargs kill -9
現(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 /home/GatewayWorker/Workerman/Worker.php on line xxxx
關(guān)鍵字:Cannot assign requested address
失敗原因:
啟動(dòng)腳本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ǎng)ip實(shí)際是代理服務(wù)器ip,公網(wǎng)ip并不屬于你的服務(wù)器,所以無法通過公網(wǎng)ip綁定,但是可以通過0.0.0.0來綁定。
現(xiàn)象3
啟動(dòng)后報(bào)錯(cuò)類似如下:
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
啟動(dòng)后報(bào)錯(cuò)類似如下:
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ù)。
現(xiàn)象5
啟動(dòng)后報(bào)錯(cuò)類似如下:
WebSocket connection to 'ws://x.x.x.x:2346/' failed: Error in connection establishment:net::ERR_NAME_NOT_TIMED_OUT
失敗原因
服務(wù)器防火墻擋住了設(shè)置的端口,這里于2346為例。
解決辦法
進(jìn)入Linux vim編輯服務(wù)器防火墻文件,添加你需要開發(fā)的服務(wù)器端口保存后重啟防火墻。
[root@iZwz9xxxxxxxxxxxxxxxxxx conf]# iptables -nvl #查看允許訪問的端口
[root@iZwz9xxxxxxxxxxxxxxxxxx conf]# vim /etc/sysconfig/iptables #編輯
[root@iZwz9xxxxxxxxxxxxxxxxxx conf]# /etc/init.d/iptables restart #重啟
以上是“workerman無法socket的解決方法”這篇文章的所有內(nèi)容,感謝各位的閱讀!希望分享的內(nèi)容對(duì)大家有幫助,更多相關(guān)知識(shí),歡迎關(guān)注億速云行業(yè)資訊頻道!
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。