本文主要介紹基于公司的一個(gè)微信小程序(藥顧問(wèn))項(xiàng)目socket客服模塊的搭建
本文目錄:
1磨隘、搭建HTTPS和wss環(huán)境;
2布讹、定義前后端通信json協(xié)議琳拭;
3、聊天系統(tǒng)搭建描验;
4白嘁、注意事項(xiàng)。
環(huán)境準(zhǔn)備
一膘流、搭建HTTPS和wss環(huán)境
具體搭建過(guò)程請(qǐng)查看我的另外一篇文章《微信小程序PHP服務(wù)器配置(https+wss)-suse版》絮缅,由于wss域名不能帶端口,所以建議用Nginx進(jìn)行代理轉(zhuǎn)發(fā)呼股。
二耕魄、定義前后端通信json協(xié)議
其中token用來(lái)驗(yàn)證消息來(lái)源合法性,fd為當(dāng)前socket連接資源ID彭谁,from為對(duì)方socket連接資源ID吸奴,cmd定義當(dāng)前操作。
三、聊天系統(tǒng)搭建
1则奥、服務(wù)端
采用TP5和swoole擴(kuò)展考润,新建一個(gè)socket模塊專門(mén)處理socket,目錄結(jié)構(gòu)如下
分為服務(wù)端server.php和客戶端client.php读处,服務(wù)端以cli形式運(yùn)行糊治,具體代碼請(qǐng)參考swoole源碼包中的ssl樣例;
運(yùn)行命令如下(先切換到服務(wù)器程序代碼的public目錄 ):
php index.php socket/server/index
客戶端其實(shí)是一個(gè)web端的websocket罚舱,源碼包中同樣有提供樣例井辜。請(qǐng)自行查看,此處不貼出源碼管闷。
2粥脚、小程序客戶端
簡(jiǎn)單封裝下微信提供的socket接口,用于處理連接成功包个,發(fā)送消息阿逃,連接失敗自動(dòng)重連等公用操作,目錄結(jié)構(gòu)如下
發(fā)送方法封裝參考:
3赃蛛、保證cli程序100%可用
編寫(xiě)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 #每隔一分鐘檢測(cè)下腳本
crontab -l
四、注意事項(xiàng)
1搀菩、如果使用TP5的幫助函數(shù)model出現(xiàn)下面的錯(cuò)誤呕臂,是數(shù)據(jù)庫(kù)連接過(guò)期導(dǎo)致,把連接過(guò)期時(shí)間設(shè)置長(zhǎng)點(diǎn)肪跋,但是總有過(guò)期的時(shí)候歧蒋,所以建議改用mongodb
2、微信小程序真機(jī)環(huán)境不予許指定端口州既,那上面的服務(wù)器配置就沒(méi)有什么用谜洽,解決辦法是:停用Apache的ssl模塊,改用Nginx作為反向代理吴叶,具體方法參考我之前寫(xiě)的文章阐虚。親測(cè)可用
3、如果用Nginx作為反向代理遇到會(huì)話很容易過(guò)期蚌卤,有兩種辦法实束,一個(gè)是設(shè)置代理超時(shí)時(shí)間為一個(gè)很長(zhǎng)的時(shí)間;一個(gè)是客戶端做個(gè)心跳檢測(cè)(即定時(shí)向服務(wù)器發(fā)送一條信息)逊彭,這兩種辦法都會(huì)增加服務(wù)器內(nèi)存消耗咸灿,但是沒(méi)有辦法只有折中考慮,建議采用后者侮叮。