Web页面如何在服务器数据变更的时候自动刷新呢? 由于http只能是UI单向请求服务器,所以一般的做法是在页面做个定时刷新的JS功能,但这种做法有以下不足:
1.不利于管理,如果需要这种功能的页面多,页面分散
2.盲目刷新,不管服务器有没有真的数据变更,只要到了轮询时间点就肯定调服务器刷新一次
3.粗粒度, 无法区别不同的变更,如 新数据产生的时候 才刷新,修改数据就不需要刷新,新增100条数据才刷新 等情况
准对上面情况,可采用 分别在前台和后台分别实现事件总线 方案来实现,具体如下:
将各种需要主动推送的变更当做不同的事件来对待,后台提供一个集中的缓存来收集这类事件。相应的业务方法处理完后,以事件的方式放入到该缓存中去,产生的时间也要一起保留.并给前端提供api来查询指定时间段产生的事件
涉及到的api如下:
getEvents(String[] eventIds, long startTimeInMilliseconds, long endTimeInMilliseconds)
前台利用jQuery,Json等技术。定时调上面的api获取指定时间该系统产生的所有事件,放入到数组中。
相关业务页面只需要向其注册监听所关心的事件,并提供相应回调方法.
前端事件总线将定时采集到得事件 通过回调方法统一分发给不同注册的页面,具体页面在回调方法中做ajax刷新功能,也可以将事件收集,如收集到了100条再做刷新,或分类来对待如 新增数据事件才刷新 等过滤操作
这样就实现了Web推送的统一管理,用户在此架构基础上做一些更加精细化得操作都是可以的.具体不再详述