SNoti是一个基于SSL接口的消息推送服务,通过以下通讯过程实现消息的传递和控制指令的发送: 客户端以Client身份与Gizwits Platform建立SSL连接,客户端无需提供证书,只需要信任服务器证书即可。 客户端发送登录指令完成验证,确保身份合法。 服务端根据设备的product_key和subkey,将消息轮流推送给相同product_key+subkey的多个客户端。不同subkey的客户端也能接收该product下设备的指定类型的消息副本,客户端之间不会相互干扰。当某客户端未返回的ack消息数达到该客户端登录设置的prefetch_count值后,消息将不再继续推送给该客户端,但会发送到其他客户端。如果某客户端断开连接并重新连接,未ack的消息会重新发送到该客户端。 客户端实时接收事件消息,并向服务器发送ack事件消息作为确认回复。这样可以确保消息的可靠传递。 当客户端在一定时间范围内没有向服务器发送任何消息时,需要发送ping心跳请求,服务器会回复pong心跳响应,以维持长连接的稳定性。 客户端可以通过发送远程控制指令来控制设备。SNoti服务在客户端登录时会缓存每个product_key对应的M2M信息,用于向设备发送控制指令。需要注意的是,当产品正式发布后,需要重启SNoti客户端以更新M2M的信息,确保控制指令的准确性和及时性。 推送工作方式: - 相同 product_key + subkey 的多个客户端登录连接,消息轮流推送到各客户端;
- 相同 product_key,不同 subkey 的客户端都能接收该 product 下设备的指定类型的消息副本,客户端之间不会相互干扰;
- 当某客户端未返回的 ack 消息数达到该客户端登录设置的 prefetch_count 值后,消息将不在继续推送给该客户端,但会发送到其他客户端;
- 未返回 ack 的消息,服务端会一直等待不会重发,只有在该客户端断开的情况下,未 ack 的消息会重新发送到连接的客户端;
- 当所有客户端都断开连接后,后续设备的消息会保存在服务端,等待客户端下次接收。
|