HTML5——Server-Sent Events:基于Node.js的动态图形报表

Day11

今日份内容:使用Server-Sent Events制作基于Node.js的动态图形报表

Node.js是一种基于事件驱动、非阻塞时I/O模型,具有轻量、高效的特点,目前广泛得到Web前端开发的使用。在使用Node.js前,需要去官网下载安装包,过程比较简单,网上也有非常多的教程,这里就不多说啦。

Server-Sent Events

  • 了解Server-Sent Events消息推送机制
  • 熟悉MessageEvent、EventSource接口
  • 通过服务端向客户端推送消息
  • 在客户端使用SSE技术接收数据
  • 使用jQuery自定义图形插件

内容

  1. 配置Node.js环境
  2. 项目初始化
  3. 安装Express框架
  4. 创建服务端路由文件
  5. 客户端实现

代码

// 该文件作为服务端的路由文件,在该文件中完成服务端路由功能
var express = require('express');
var app = express();
//配置静态资源的访问方式
app.use(express.static('public'));
app.get('/', function(req, res) {
   
   
	res.type('text/html');
	//推荐使用sendFile(),该方法需要使用文件的绝对路径
	res.sendFile(__dirname + '/public/chartReport.html');
});

var clientId = 0;
var clients = {
   
   };
//记录用户连接请求
app.get('/events/', function(req, res) {
   
   
	req.socket.setTimeout(Number.MAX_VALUE);
	res.writeHead(200, {
   
   
		'Content-type': 'text/event-stream',
		'Cache-Control': 'no-cache',
		'Connection': 'keep-alive'
	});
	res.write('\n');
	(function(clientId) {
   
   
		//将连接保存到集合中
		clients[clientId] = res;
		//当连接关闭后,从连接集合中移除
		req.on("close", function() {
   
   
			delete clients[clientId]
		});
	})(++clientId);
});
//对所有客户端发送数据
setInterval(function() {
   
   
	for (clientId in clients) {
   
   
		clients[clientId].write('data:' + createRandomData() + '\n\n');
	};
}, 500);
//生成随机数据,并以JSON字符串形式返回
function createRandomData() {
   
   
	let drawData = [];
	let items = ['女装', '男装', '童装', '运动', '内衣'];
	for (let i = 0; i < 5; i++) {
   
   
		let random = parseInt(Math.random() * 100);
		let item = {
   
   
			'name': items[i],
			'amount': random
		};
		drawData.push(item);
	}
	return JSON.stringify({
   
   
		'drawData': drawData
	});
}
app.listen(process.env.PORT || 3000);

<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8">
		<title>图形报表统计</title>
		<script type="text/javascript" src="js/jquery-1.x.js"></script>
		<script src="js/jquert.chart.js
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

is_Del

你的鼓励将是我创作的最大动力

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

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

打赏作者

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

抵扣说明:

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

余额充值