本文主要介紹基于公司的一個微信小程序項目socket聊天系統的搭建,前后端代碼,服務器配置均由一個人完成,難度不大;
本文目錄:
1、搭建HTTPS和wss環境;
2、定義前后端通信json協議;
3、聊天系統搭建;
4、注意事項。
環境準備
一、搭建HTTPS和wss環境
具體搭建過程請查看我的另外一篇文章《微信小程序服務器環境搭建--suse版》,由于wss域名不能帶端口,所以建議用Nginx進行代理轉發。
二、定義前后端通信json協議
其中token用來驗證消息來源合法性,fd為當前socket連接資源ID,from為對方socket連接資源ID,cmd定義當前操作。
三、聊天系統搭建
1、服務端
采用TP5和swoole擴展,新建一個socket模塊專門處理socket,目錄結構如下
分為服務端server.php和客戶端client.php,服務端以cli形式運行,具體代碼請參考swoole源碼包中的ssl樣例;
運行命令如下(先切換到服務器程序代碼的public目錄 ):
php index.php socket/server/index
客戶端其實是一個web端的websocket,源碼包中同樣有提供樣例。請自行查看,此處不貼出源碼。
2、小程序客戶端
簡單封裝下微信提供的socket接口,用于處理連接成功,發送消息,連接失敗自動重連等公用操作,目錄結構如下
發送方法封裝參考:
3、保證cli程序100%可用
編寫shell腳本如下:
count=`ps -fe |grep "socket/server" | grep -v "grep" | grep "master" | wc -l`
echo $count
if [ $count -lt 1 ]; then
ps -eaf |grep "socket/server" | grep -v "grep"| awk '{print $2}'|xargs kill -9
sleep 2
ulimit -c unlimited
/opt/app/php/bin/php /opt/web/think/public/index.php socket/server/index
echo "restart";
echo $(date +%Y-%m-%d_%H:%M:%S) >/opt/script/log/restart.log
fi
啟用crontab
crontab -e
加入一行:
*/1 * * * * /opt/script/check_server.sh #每隔一分鐘檢測下腳本
crontab -l
四、注意事項
1、如果使用TP5的幫助函數model出現下面的錯誤,是數據庫連接過期導致,把連接過期時間設置長點,但是總有過期的時候,所以建議改用mongodb
2、微信小程序真機環境不予許指定端口,那上面的服務器配置就沒有什么用,解決辦法是:停用Apache的ssl模塊,改用Nginx作為反向代理,具體方法參考我之前寫的文章。親測可用
3、如果用Nginx作為反向代理遇到會話很容易過期,有兩種辦法,一個是設置代理超時時間為一個很長的時間;一個是客戶端做個心跳檢測.這兩種辦法會增加服務器內存消耗,但是沒有辦法只有折中考慮。
新聞熱點
疑難解答