前言:
常常做東西的時候最不願搭環境了,所以如果只是用於學習或者一些小項目,我都會選擇在服務器上使用寶塔面板。自然swoole也是直接用BT的方式安裝,但是呢,最近我寫的一個雙人對戰的五子棋小游戲,在我本機虛擬機上能正常運行。放到之前已經裝好swoole的服務器上時(寶塔面板安裝的),卻接連報錯。
問題一 :
那個五子棋聯機小游戲的后台使用的是easyswoole,所以我測試性的啟動一下。php easyswoole start,卻出現 PHP Warning: Module 'swoole' already loaded in Unknown on line 0,重啟php fpm也是報這個錯。
根據信息提示,就是swoole擴展已經加載過。所以可能就是php.ini文件中多出了一個extension=swoole.so,所以把多的注釋或者直接刪掉,最好重啟一下php就沒有這個錯誤了。
問題二:
php啟動是沒問題了,通過命令php -m | less查看PHP安裝的擴展中也有swoole。但是銅通過php easyswoole start啟動時,又報了一個新的錯誤。Swoole\Process::__construct() expects at most 3 parameters, 4 given。 錯誤也指出了文件錯誤的詳細地方,提示是說那個類的構造函數應該是傳3個參數,但是現在卻傳了4個。
我又回到我虛擬機的環境里的代碼,發現沒什么異常。導致這種原因的那肯定就是搭建的環境中某個軟件的版本原因,首先我先懷疑PHP版本,在我認真比對下,PHP版本一致。后來再看了一下錯誤,錯誤的根據是一個swoole的函數報錯的。所以這肯定是swoole版本原因,可能是舊版本函數某個參數被去掉了。於是我通過命令查看了swoole版本,php --ri swoole
果然,我之前的是4.5版本,而現在寶塔上的這個是2.2。所以我就去網上找了很多寶塔升級swoole版本的方法,確實也有很多。試過了一兩個后沒起效果,於是我把swoole刪掉,重新再裝一遍。這次我沒有按順序,而是先裝swoole4, 然后再裝的swoole。最后查看版本竟然成功變成了4.5
問題三:
php easyswoole start啟動也沒有報錯了,於是我就打開了游戲頁面。發現兩個玩家全都連接不上服務器,單獨將ws服務地址請求也連接失敗。在放行的寶塔上ws服務端口也顯示在使用,那這個是什么原因呢。
折騰了一陣后,我才想起來阿里雲的服務器也有一個安全組配置。所以肯定是那個端口是被阿里雲的系統攔住了,只要找到安全組添加一個入站規則然后加上端口。最后重啟es,打開游戲頁面,可以正常運行了。