ThinkPHP6.0和GatewayWorker双向通讯的问题

lixiang

问题描述

目前,在用ThinkPHP6.0做VUE前后端分离的接口开发。项目开发过程中消息推送,目前用的前端定时请求接口这边获取,轮询比较耗费性能。所以,看到WorkerMan可以用来做一些websocket相关的推送服务,再看到GatewayWorker框架手册,还是有些不太明白的地方。

为此你搜索到了哪些方案及不适用的原因

问题一:前端那边通过TP6接口登录后会获取一个包含UID的token信息,然后需要与GatewayWorker建立websocket连接,这个UID之前有一些离线消息需要推送,我的想法是GatewayWorker通过HTTP请求的方式获取TP6离线用户的接口数据或者GatewayWorker通过MySQL直接获取离线数据,也就是GatewayWorker和TP6数据共享是Redis或MySQL;
问题二:前端通过TP6接口产生了新的消息,TP6通过GatewayClient提供的接口给前端那边推送消息,但是需要clientId,TP6这边只知道UID,不知道clientId;而GatewayWorker那边通过前端建立连接产生的TOKEN解析出UID,然后通过UID和clientId进行绑定,而且也没法告知TP6,这样绑定关系只能放到Redis或MySQL里面;GatewayWorker里面需要处理部分的逻辑,与Redis或MySQL进行交互;
所以,请教大家,TP6或其他PHP框架与GatewayWorker双向通讯的方式。

809 2 0
2个回答

安静角落

你前端连接GatewayWorker的时候GatewayWorker直接返回一个clientId,然后你把这个clientId发给tp后台,由tp进行uid->clientId绑定;
GatewayWorker不建议进行任何业务处理;离线消息你在tp后台收到clientId绑定后直接处理业务把通知消息发给GatewayWorker由GatewayWorker进行通知

chen

客户端连接上websocket后,发送token过来,服务端解析token拿到uid,然后bindUid
同时加一个定时器,连接上多长时间后没鉴权成功的就断开连接

  • lixiang 2023-08-31

    其实,核心问题是tp和gatewayWorker双向通信的问题,客户端连上websocket后,有没有更好的方法websocket通知tp那边给UID发送消息

🔝