web 实时刷新 websocket 大数据

 最近在做的一个项目,是一个大数据分析平台,有如下需求:有如果个实验设备运行并且将运行数据通过socket发送到分析平台,分析平台通过运行socket作业来完成对socket数据的接收,同时还需要对接收到的socket数据进行解析并且可以通过一个数据看板对数据实时监控。如下图所示:

       

       

选择websocket的原因,就是看板页面不必每次都去定时的请求数据,而是一旦websocket服务器发现有新数据则直接推送给客户端进行渲染,减少了占用的宽带和服务器资源。由于socket数据量多且快,所以如果将数据直接存入到传统的关系型数据库则会遇到效率瓶颈,这时候就必须要有一个缓存,redis基于内存且最大的特点就是快,用作缓存再合适不过,待作业结束后再将数据保存进hbase中即可。看板用到了baidu的echarts3折线图。


接收到的socket数据源源不断的被写入到redis中,接收到的数据格式类似于:数据量1|数据量2|数据量3|日期1|日期2...websocket的任务就是将这些数据交给看板进行渲染,那么怎么去拿到数据呢?就是websocket服务端定时的去redis拿,一旦有新数据则推送给看板。


 首先开发websocket服务端,ServerSocket采用单例模式,因为是集成服务,所以如果需要关闭服务的话可以直接将ServerSocket关闭即可,服务器端代码如下:

[java] view plain copy

1.     PrintWriter pw = getWriter(socket);    

2.                 byte[] buf = new byte[1024];    

3.                 int len = in.read(buf, 01024);    

4.                 byte[] res = new byte[len];    

5.                 System.arraycopy(buf, 0, res, 0, len);    

6.                 String key = new String(res);    

7.                 if (!hasHandshake && key.indexOf("Key") > 0) {    

8.                     key = key.substring(0, key.indexOf("==") + 2);    

9.                     key = key.substring(key.indexOf("Key") + 4, key.length())    

10.                         .trim();    

11.                  key += "258EAFA5-E914-47DA-95CA-C5AB0DC85B11";    

12.                 MessageDigest md = MessageDigest.getInstance("SHA-1");    

13.                  md.update(key.getBytes("utf-8"), 0, key.length());    

14.                 byte[] sha1Hash = md.digest();    

15.                  sun.misc.BASE64Encoder encoder = new sun.misc.BASE64Encoder();    

  • 0
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

yue31313

感谢打赏,继续分享,给您帮忙。

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值