Gateway-Worker啓動失敗或者啓動無法正常使用的幾種方法

Workerman是一款開源高性能異步PHP socket即時通訊框架。支持高併發,超高穩定性,被廣泛的用於手機app、移動通訊,微信小程序,手遊服務端、網絡遊戲、PHP聊天室、硬件通訊、智能家居、車聯網、物聯網等領域的開發。 支持TCP長連接,支持Websocket、HTTP等協議,支持自定義協議。擁有異步Mysql、異步Redis、異步Http、MQTT物聯網客戶端、異步消息隊列等衆多高性能組件。

環境        

1. CentOS 7.0

2.ThinkPHP 5.1

3.Workman 3.5.20

 

問題

1. ThinkPHP5.1以後,不能將vendor中的包(workman也在其中)複製後直接使用裏面的類,在項目剛搭建的時候可以將需要的包寫在composer.json中後composer install,或者composer require flc/dysms 等。

 

2. workman安裝成功,基本的業務功能也寫完了,進入服務器找到項目的根目錄,輸入 php think worker:gateway -d,或者 php think worker:gateway start。

 

3. 可能啓動成功,輸入 php think worker:gateway status 查看進程的信息。

 

4. 服務端成功後,上面"websocket://0.0.0.0:9502“ 在客戶端如果連接出現 ”WebSocket connection to 'ws://x.x.x.x:2346/' failed: Error in connection establishment:net::ERR_NAME_NOT_TIMED_OUT“,表示防火牆攔住了設置的端口。

方法:如果CentOS安裝了寶塔面板,安全->添加端口->放行。如果使用命令添加,最後 firewall-cmd reload 命令重啓防火牆即可。

 

5. 啓動成功,客戶端通過websocket連接也沒有報錯,但就是發送消息過來,後端的Events中OnMessage事件一直接收不到消息。問題就有可能就是Events文件中有語法錯誤或者什麼異常。

方法:去vendor文件夾中找到workman的workman.log,查看錯誤的地方在哪裏再修改即可解決。

 

6. 如果啓動後出現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

方法:通過命令netstat -anp | grep 端口號來找出哪個程序佔用了端口,然後關閉對應程序釋放端口。

 

7. 如果啓動後出現Waring stream_socket_server has been disabled for security reasons in ...

方法:找到運行的PHP版本的php.ini ,禁用函數stream_socket_server去除,寶塔操作如下。

 

8. 如果啓動後出現PHP Warning:  stream_socket_server(): unable to connect to tcp://0.0.0.0:xxx (Permission denied)

方法:使用大於1024的端口或者使用root用戶啓動服務。

 

9. 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

方法:啓動腳本ip參數寫錯,不是本機ip,請填寫本機ip機或者填寫 0.0.0.0(表示監聽本機所有ip)即可解決。提示:Linux系統可以通過命令 ifconfig查看本機所有網卡ip。如果您是騰訊雲用戶,注意您的公網ip實際是代理服務器ip,公網ip並不屬於你的服務器,所以無法通過公網ip綁定,但是可以通過0.0.0.0來綁定。

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章