硬件数据推送给特定手机端

不说再见

我使用的gateway,硬件传输数据的时候可以带上当前硬件设备的pid,然后我用gateway推送给当前正在使用这台硬件设备的用户手机app上。是不是就是要这手机app连接的时候也传过来这台设备的pid,然后这两个客户端建立单独的连接通讯,那我服务端要怎么判断呢?如果硬件用tcp长连接把数据存数据库,然后然后app用http轮询调用倒是可以实现。 只是我希望服务端也能通过和app长连直接推送,这样应该更快一些

3331 1 1
1个回答

walkor

1、设备连接gateway
2、设备发送一个pid登录请求,gateway中Events::onMessage回调中收到请求,得到pid进行绑定,Gateway::bindUid($client_id, $pid);,同时设置$_SESSION=$pid,用来gateway记录当前设备pid
3、因为设备绑定了pid,那么gateway服务端可以通过Gateway::sendToUid($pid, $data);给任意设备发送数据
4、同样app链接gateway
5、app发送一个请求,请求中包含要查看的pid
6、gateway中Events::onMessage回调中收到app请求,得到要查看的pid,用Gateway::joinGroup($client_id, $pid); 加入分组(或者叫订阅这个pid发来的消息)
7、设备pid传输数据到gateway,gateway中Events::onMessage回调中收到数据,首先判断$_SESSION是否存在,存在的话证明这个设备验证过pid,并绑定过pid。没有验证过则进入步骤2验证绑定。
如果已经验证,则Events::onMessage回调中调用Gateway::sendToGroup($_SESSION, $data)给pid分组发送数据,那么6步骤中joinGroup过的app将会收到对应pid设备发来的数据

  • 不说再见 2016-12-15

    非常感谢

  • 不说再见 2016-12-21

    请问如果我想把当前连接的硬件设备,连接的时候把时间记录下来,断开的时候再记录下来写到数据库,以便统计设备使用情况。但是在onConnect连接的时候得不到该设备的pid,只有在 onMessage里传来了pid才有。那该怎么得到该设备的使用情况呢

  • walkor 2016-12-21

    onConnect时$_SESSION里记录个时间,onMessage里得到pid记录到$_SESSION,onClose的时候使用$_SESSION就都得到了

年代过于久远,无法发表回答
🔝