一、背景
在餐饮行业中,店内应用有pos、厨显屏等,云端应用为对应数据中心。店内应用部署在私有网络中,云端应用部署在阿里云中。为了实现云端下发指令给店内应用,需要实现推送功能。
二、技术设计方案
1.系统架构图
消息推送实现方式主要有两种,一种是基于长连接,另一种是基于客户端轮询。为了兼顾实时性和一致性,本系统采用长连接和轮询两种方式进行实现。
2.轮询方式选择
a、长轮询(Long Polling) 。具体流程如下
- 客户端发起一个HTTP请求到服务器,并设置一定超时时间,但服务器不会立即发送响应。
- 服务器收到请求后,检查是否有新的数据或通知可以返回给客户端。如果有,服务器会在超时之前立即返回响应。
- 如果服务器没有数据或通知可用,则会保持请求打开,直到有新的数据或通知准备好,或者超过了指定的超时时间。如果超时时间到达,服务器会发送空响应,客户端收到空响应后会再次发起一个长轮询请求。
- 客户端在收到响应后,再次发起长轮询请求,重复以上步骤。
线程挂起和唤醒可以借助guava工具的SettableFuture实现。
b、轮询 + 缓存方式
3.数据模型选择
a、读扩散 - 消息表 & 消费者位移表
b、写扩散 - 消息数据表 & 消费者消息扩散表
读扩散,写扩散,终于终于讲清楚了!-腾讯云开发者社区-腾讯云 (tencent.com)https://cloud.tencent.com/developer/article/1942262
4.push-router 实现方案
a、基于mq广播
b、通过数据库维护设备和链接关系