Websocket(3)--实时推送
来源:互联网 发布:数据山东吧 编辑:程序博客网 时间:2024/05/20 23:05
我们知道websocket的一个优势就是后台可以主动给前台推送数据,这里做个小例子演示一下。
场景:后台获取cpu数值推送到前台图表显示(这里的cpu数据是模拟的,不是真实获取)
前台数据展示图表用到echart,这里不做详细介绍,如有问题可留言。
客户端:cpu.html
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"><html><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><script language="javascript" type="text/javascript" src="../echarts/echarts.js"></script><script type="text/javascript" src="cpu.js"></script><title>Insert title here</title></head><body onload="page_onload_1()"><div id="main" style="height:600px;width:800px;padding:10px;"></body></html>
cpu.js
var myChart;function page_onload_1(){ drawChart(); sendReq();}function drawChart(){ //路径配置 require.config({ paths: { echarts: '../echarts' } }); var option = { title : { text: 'cpu使用率' }, tooltip : { trigger: 'axis' }, legend: { data:['cpu使用率'] }, toolbox: { show : true, feature : { mark : {show: true}, dataView : {show: true, readOnly: false}, magicType : {show: true, type: ['line', 'bar']}, restore : {show: true}, saveAsImage : {show: true} } }, dataZoom : { show : false, start : 0, end : 100 }, xAxis : [ { type : 'category', boundaryGap : true, data : [0,0,0,0,0,0] } ], yAxis : [ { type : 'value', scale: true, name : 'cpu使用率', //boundaryGap: [0.2, 0.2], splitNumber :'10', min:0, max:100 } ], series : [ { name:'CPU使用率', type:'line', data:[0,0,0,0,0,0] } ] }; require( [ 'echarts', 'echarts/chart/bar', 'echarts/chart/line' ], function (ec) { myChart = ec.init(document.getElementById('main')); myChart.setOption(option); } ); }function sendReq(){ var data; try { var ws = new WebSocket("ws://127.0.0.1:8080/testProject2/websocket");//连接服务器 ws.onopen = function(event){ alert("已经与服务器建立了连接rn当前连接状态:"+this.readyState); ws.send("hello"); }; ws.onmessage = function(event){ //alert("接收到服务器发送的数据:rn"+event.data); data = event.data.split(","); // 动态数据接口 addData myChart.addData([ [ 0, // 系列索引 data[1], // 新增数据 true, // 新增数据是否从队列头部插入 false, // 是否增加队列长度,false则自定删除原有数据,队头插入删队尾,队尾插入删队头 data[0] ] ]); }; ws.onclose = function(event){ alert("已经与服务器断开连接rn当前连接状态:"+this.readyState); }; ws.onerror = function(event){ alert("WebSocket异常!"); }; } catch (ex) { alert(ex.message); }}
此处的url中的/websocket与服务端代码注释中的@ServerEndpoint(“/websocket”)对应
服务端代码:WebSocketServer.js
package com.css.sword.websocket;import java.io.IOException;import java.text.SimpleDateFormat;import java.util.Date;import java.util.Random;import javax.websocket.OnClose;import javax.websocket.OnMessage;import javax.websocket.OnOpen;import javax.websocket.Session;import javax.websocket.server.ServerEndpoint;/** * <p>Title:WebSocketServer</p> * <p>Description: </p> * @author yuanxj * @date 2016-1-8 */@ServerEndpoint("/websocket")public class WebSocketServer { @OnOpen public void open(Session session){ System.out.println("已建立连接!"); } @OnClose public void close(Session session){ System.out.println("已关闭连接!"); } @OnMessage public void onMessage(Session session,String message) throws IOException, InterruptedException{ System.out.println("开始接收消息:"+message); String result; int i=0; SimpleDateFormat f=new SimpleDateFormat("HH:mm:ss");//日期限制为14位 String time; while(i<10000) { time = f.format(new Date()); result=time+","+String.valueOf(gengrateCpuData()); Thread.sleep(1000); session.getBasicRemote().sendText(result); i++; } } private int gengrateCpuData() { int result = 0; Random random = new Random(); for(int i = 0; i < 100;i++) { result=Math.abs(random.nextInt())%10; System.out.println(result); } return result; }}
结果如下图所示,这里是截图,折线图是实时更新的:
0 0
- Websocket(3)--实时推送
- html5 websocket 实时日志推送
- websocket准实时推送消息
- 【反ajax】webSocket实现实时推送功能
- 【反ajax】webSocket实现实时推送功能
- redis+websocket 实现统计数据实时推送
- php实现websocket实时消息推送
- php实现websocket实时消息推送
- spring boot 集成websocket实现实时推送
- C/C++ 基于 websocket 的前台及后台实时推送
- 基于 Websocket + PHP + Swoole + Redis 第三方实时推送
- WebSocket和kafka实现数据实时推送到前端
- NodeJS实现WebSocket前端和服务器通信,实时推送
- WebSocket点对点通信-Tomcat websocket点对点通信-实时通信-服务器消息推送
- 发一个WebSocket+PHP聊天室-PHP多进程实时服务器推送技术
- 服务器实时通知客户端方案,服务器发送/推送事件方案(1)websocket
- RabbitMQ订阅发布的消息,通过WebSocket实现数据实时推送到前端上显
- webSocket 如何实现服务器端 想页面推送实时数据? 动态数据?如何进行连接?
- 20个命令行工具监控 Linux 系统性能
- 解除svn版本控制
- 状态栏(UITabBar)、导航栏(UINavigation)
- java继承小实例
- 系统定义弹窗以及自定义弹窗
- Websocket(3)--实时推送
- vector push_back报错 是其他地方内存越界覆盖掉了后面的内存
- No JNI_OnLoad found in ......, skipping init
- js实现百度动态LOGO
- PAT--1085 Perfect Sequence(二分查找)
- ios开发动画效果的基本学习介绍
- 【Java】换底公式
- 数据持久化
- iOS开发---生成二维码