关于 websocket 接收到消息后,如何发送给 PHP?

背景

您好,我们线下(每个门店有一个软件)的软件是使用 Nodejs 写的服务。现在开通了线上服务,因为有些数据需要去线下取,又因线下 IP地址不固定,无法走 HTTP,所以目前计划使用的是 PHP与线下软件使用 websocket 通讯。

场景例子

用户小程序端获取某位会员的账单流水
小程序请求API -> PHP接口处理 -> PHP 将任务转发给 Workerman处理 -> Workerman下发给线下 Nodejs 服务 -> 线下查询数据后返回给 Workerman -> Workerman 接收到数据后返回至第二步的 PHP接口?

待解决问题

  1. Workerman 接收到线下返回的数据后,如何返给PHP 的接口?
  2. 或者是否有其它的解决方案?

可能的解决方案

加入数据缓存层:线下数据返回后,写入到 Redis 中。此时PHP的接口不断等待去查询缓存,直到查询到后再接口返回。
问题:存在阻塞的问题,如果线下或 websocket 有问题,会一直阻塞其它的请求。

敬请各位大佬解惑。

阅读 3.1k
4 个回答
✓ 已被采纳新手上路,请多包涵

已使用加入缓存的方式解决,业务处理让前端去处理。

PHP接口接收到请求后,先查询缓存数据,如果没找到则下发网关请求线下数据,此时直接返回。让前端去轮询接口,直到有真的返回值停止。

感谢,结贴。

为啥你觉得因为 IP 不固定,http 就不行,但 websocket 就可以?

如果是线下主动发起的话,并且处理时间不固定,感觉可以不用 websocket,而是由 PHP 返回一个任务 id,然后线下去轮询这个 job 结果。

php是固定ip应该作为websocket服务端,小程序和线下的nodejs服务应该作为客户端,注册对应标识,小程序推送请求到服务端,然后服务端推送对应的处理结果给线下nodejs服务。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题
宣传栏