您的位置:首页 > 数据库 > Redis

redis+websocket 实现统计数据实时推送

2017-08-23 13:30 2021 查看
刚刚进入这个公司是三年前,我也刚刚满打满算有了两年工作经验,开发时很少会考虑性能、安全这些方面的东西。那时候公司需要我做一个监控大屏,就是满是统计图表的一个页面,投影出来展示。刚刚接手的时候我觉得这个项目的难点有两个:图表插件和统计sql。经过一段时间的开发,项目基本完成,图表选择用的highchars,参照着demo里的数据格式传入数据并没有想象中的困难,sql也勉勉强强的写了出来了,但是性能一般,经过很多次的优化,也说的过去。到这里看上去应该是一个圆满的结局,实际上一个痛苦的开始。随着公司业务上扩展,之前一个地区的监控大屏变成多个地区的大屏,没关系复制出来个项目改改参数两个小时我就可以开发一个项目。知道有一天有一个地区反映大屏打开慢,数据加载慢,通过验证得出结论,这个项目数据的加载是靠着jquery定时器每隔几秒去后台刷新数据,是很多的项目同时刷同样的数据导致的。经过讨论,最后决定做一个data-center为这些大屏提供数据。把一些不用实时去查询的数据缓存到static变量中,以供前台拉取,页面打开时间可以接受了。再后来去北京工作的一年当中我把这个项目和解决问题的过程当做主要的工作经历来介绍,也在面试的过程当中得到了很多别人的想法,比如说后台的数据推送和缓存工具的使用。但是我觉得恐怕没有机会,去亲手改造那个项目了。

在北京的这一年就像午休小憩时做了一场梦一样,一觉醒来,旁边坐着以前的同事,眼前是当年自己的写的代码。以前经常对未知的明天忧心忡忡,现在是对未来有着莫名的期许。回到公司第一个主要的任务就是大屏的开发,但不是以前做的以区和街道为单位的统计,这次是上海市、杭州市的数据统计。是时候展现真正的技术了。。。

redis现在主流的 nosql 数据库,相比以前比较常用的Memcache 支持了更多的数据类型,value容量更大(采取key-value
方式存取数据),会把数据写入到磁盘进行持久化。websocket基于tcp的网络协议,在前端和后台完成我握手后支持服务器像前端推送消息。

      websocket需要jdk7以上的支持,tomcat版本也有要求,我本地开发使用的是7.0.75是支持的,
服务器上是7.0.6是不支持的,解决办法是把7.0.75下lib(tomcat的lib)替换给7.0.6。。。。实现握手的方式是在加载页面的时候先在js中实现websocket  = new WebSocket(url); //创建WebSocket对象 url 和 springmvc访问controller一样,接受握手的类需要在类名上面加@serverEndpoint注解,里面默认有@OnMessage、@OnOpen、@OnClose三个方。顾名思义,onopen是在建立握手是调用,可以用来存这个websocket实例供以后使用或进行一些其他的操作。@OnClose是在ws断开时调用,@OnMessage是在接受到前台发来消息时调用,
可以用于在线聊天这样的功能。



在页面上建立握手的js中也提供相对的方法



实现推送,需要先回去连接的实例,就是握手类的实例。 我惠在握手建立成功时在 onopen方法中 wsSet.add(this) 帮当前类的实例存入到一个全局的static的set当中,以便在以后推送数据时使用。这里就是websocket和服务建立握手的
8418
过程和代码。

redis要说的就不多了,在服务器搭建好,写定时任务把数据定时的写入redis中,再写一些定时任务去redis中获取数据,推送到前台。

同样的工作,同样的人,不同时间,怎么说呢 ,人要不断的学习新的东西,不断的请教,才能进步。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: