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來綁定。