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