终端和后端数据一致性
- 数据有改动马上/定期下发到终端
- 新增终端会基于终端发布表(其所在分类/组织架构/标签),自动下发数据
- 数据都是全量下发
- 每次数据都是从数据库重新获取。后续可以优化保存到缓存,有操作时更新缓存(操作处理)
操作清单
频道下发,频道编辑,档期编辑,节目编辑...
流程
- 用户操作,操作处理,下发
- 启动时数据同步
用户操作
操作insert操作表
操作放到MQ
if (操作 == publish(或者解绑))
发布进终端发布表
操作处理
从MQ获取操作
处理操作成数据下发记录(当前所有的操作,数据都是频道明细)
insert下发回执表
下发
从下发回执表获取本终端的所有数据下发记录
下发
启动时数据同步
终端启动时同步数据,确保一致性
终端数据 = 终端启动时上传终端的数据情况(数据类型,编号,版本)
后端数据 = 后端获取该终端的数据情况
if (终端数据 != 后端数据) {
都有&&不一致:insert修改到下发回执表
后端有&&终端没有:insert新增到下发回执表
后端没有&&终端有:insert删除到下发回执表
}
insert下发回执表
- 忽略insert条件:同样的数据类型编号 && 同样的数据签名 && 未回执
- insert时没有版本号和数据签名,在真正下发时填写
表
操作表
数据类型,数据值,操作(action)
下发回执表
- 数据类型(如频道,频道明细),数据值,版本(暂不使用),数据签名(只能做差异比较),回执时间
- 数据签名用途原因:频道明细(组合数据)下发,无法有版本号(除非所有的改动都通知频道明细)
终端发布表
类型(分类/组织架构/标签/终端),类型值
基于版本的终端和后端的同步方案
- 每个信息表加一个版本+终端同步清单表:终端,类型,类型值,版本,回执时间
- 终端和后端双方都需要回执确认机制
- 用户查看同步情况:把未同步的下发记录显示出来
频道和档期
- 频道本质是计划,使用方式:春节是一个频道,圣诞节是一个频道
- 不支持紧急排期,紧急本质是优先级,通过新建高优先级频道替代
- 档期播放优先级基于频道优先级和创建时间倒序
- 合并排期信息到档期
- 终端档期和频道的管理:一个页面上有档期和频道
联屏
- 主屏通过UDP广播找到所有终端,记录之。形成联屏的子屏UDP组
- 主屏通过UDP组通知子屏下载资源(url)
- 子屏通知主屏(API)下载完成
- 主屏通过UDP组通知子屏播放(url)
- 主屏通过UDP组通知子屏播放帧数(url, 帧数)
- 主屏通过UDP组通知子屏停止播放(url)
- 主屏通过UDP组通知子屏删除资源(url)
发布到联屏屏幕时触发切图,放到资源表
一个终端同时多个屏幕咋办?
终端激活
if (未激活设备) {
密码/手机激活
while (设备未激活) {
sleep
查询设备是否激活
}
}
建立长连接