目前,在用ThinkPHP6.0做VUE前后端分離的接口開發(fā)。項(xiàng)目開發(fā)過程中消息推送,目前用的前端定時請求接口這邊獲取,輪詢比較耗費(fèi)性能。所以,看到WorkerMan可以用來做一些websocket相關(guān)的推送服務(wù),再看到GatewayWorker框架手冊,還是有些不太明白的地方。
問題一:前端那邊通過TP6接口登錄后會獲取一個包含UID的token信息,然后需要與GatewayWorker建立websocket連接,這個UID之前有一些離線消息需要推送,我的想法是GatewayWorker通過HTTP請求的方式獲取TP6離線用戶的接口數(shù)據(jù)或者GatewayWorker通過MySQL直接獲取離線數(shù)據(jù),也就是GatewayWorker和TP6數(shù)據(jù)共享是Redis或MySQL;
問題二:前端通過TP6接口產(chǎn)生了新的消息,TP6通過GatewayClient提供的接口給前端那邊推送消息,但是需要clientId,TP6這邊只知道UID,不知道clientId;而GatewayWorker那邊通過前端建立連接產(chǎn)生的TOKEN解析出UID,然后通過UID和clientId進(jìn)行綁定,而且也沒法告知TP6,這樣綁定關(guān)系只能放到Redis或MySQL里面;GatewayWorker里面需要處理部分的邏輯,與Redis或MySQL進(jìn)行交互;
所以,請教大家,TP6或其他PHP框架與GatewayWorker雙向通訊的方式。
你前端連接GatewayWorker的時候GatewayWorker直接返回一個clientId,然后你把這個clientId發(fā)給tp后臺,由tp進(jìn)行uid->clientId綁定;
GatewayWorker不建議進(jìn)行任何業(yè)務(wù)處理;離線消息你在tp后臺收到clientId綁定后直接處理業(yè)務(wù)把通知消息發(fā)給GatewayWorker由GatewayWorker進(jìn)行通知
你所謂的“智能”才是真的不智能,要相信 群主的 http上報,ws下發(fā)的方案, 群主可是負(fù)責(zé)過騰訊QQ空間項(xiàng)目的,有實(shí)戰(zhàn)經(jīng)驗(yàn)