1、网站页面建立与GatewayWorker的websocket连接
2、GatewayWorker发现有页面发起连接时,将对应连接的client_id发给网站页面
3、网站页面收到client_id后触发一个ajax请求(假设是bind.php)将client_id发到mvc后端
4、mvc后端bind.php收到client_id后利用GatewayClient调用Gateway::bindUid($client_id, $uid)将client_id与当前uid(用户id或者客户端唯一标识)绑定。如果有群组、群发功能,也可以利用Gateway::joinGroup($client_id, $group_id)将client_id加入到对应分组
5、页面发起的所有请求都直接post/get到mvc框架统一处理,包括发送消息
6、mvc框架处理业务过程中需要向某个uid或者某个群组发送数据时,直接调用GatewayClient的接口Gateway::sendToUid Gateway::sendToGroup 等发送即可。
上面步骤已经完成,使用Gateway::bindUid($client_id, $uid);也可以发送成功。
接下来我想使用Timer定时器根据前端用户传来的参数从数据库读取相应数据定时发送,该如何实现,麻烦指教一下。 mca后端貌似不能直接使用Timer?
直接通过 Gatewayworker 绑定用户和群组就可以了,为什么还要通过其它框架?在你打开页面的时候就可以从你的 web 服务器(也就是你说的其它框架那里)获取对应的用户资料,直接发给 Gatewayworker 就行,自己定义好 $message,例如 $message 可以是一个 json 字符串,通过 auth 字段验证,bindUid 字段绑定,sendToUid 字段获取数据进行发送。在 onWorkerStart 那里设置个定时器,当接收到发送指令时就查询数据进行发送。
以上只是大概思路。
感谢您的回答,可能我描述得不太清楚, 我想实现的流程是这样:前端用户进入某个商品A页面后与Gatewayworker建立链接,请教的是接下去如何使用定时器定时给用户发送商品A【如果进入的是商品B就发商品B】的一些数据(数据通过数据库读取或者读取缓存)
@7404:一样道理啊,你进入页面之后就可以从 web 服务器获取到商品信息,你将 uid 和 商品 id 一起发到 gatewayworker 不就得了,自己用 composer 在 gatewayworker 引入数据库操作库,然后通过定时器查询数据发送
有些开发者习惯了tp写业务。
需求描述的有点粗糙。
把定时任务(包括发送时间)存在数据库里,用workerman开一个进程,定时(比如每秒)http访问tp的一个地址,tp里读数据库找到到了时间的定时任务,然后执行。
感谢您的回答,可能我描述得不太清楚, 我想实现的流程是这样:前端用户进入某个商品A页面后与Gatewayworker建立链接,请教的是接下去如何使用定时器定时给用户发送商品A【如果进入的是商品B就发商品B】的一些数据(数据通过数据库读取或者读取缓存)
这种需求直接前端js设置个定时器,ajax请求下商品信息就好了