Skip to content

Commit 659bbb0

Browse files
committed
对于动态数据,增加server端,从server端获取动态数据,更新图表
1 parent 823950e commit 659bbb0

File tree

6 files changed

+162
-58
lines changed

6 files changed

+162
-58
lines changed

Diff for: echarts/ReadME.md

+6
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
# 动态数据
2+
在dynamicData.js中,实时从服务端获取数据。因此需要将server.js运行起来
3+
运行的方式
4+
```js
5+
node server.js
6+
```

Diff for: echarts/dynamicData.js

+104-36
Original file line numberDiff line numberDiff line change
@@ -1,35 +1,42 @@
11
import echarts from 'echarts';
2+
import io from 'socket.io-client';
23

34
let myChart = echarts.init(document.getElementById('root'));
45

5-
let now = +new Date(2010, 10, 10);
6-
let value = Math.random() * 1000;
6+
let now = +Date.now();
7+
// let value = Math.random() * 1000;
78
const oneSecond = 1000 * 60;
89

9-
let data = [];
10+
const socket = io('http://localhost:3000');
11+
12+
let analogData = [];
13+
let digitalData = [];
1014

1115
// 初始化
1216
// 原有的 data 的大小,决定了在时间轴上的数据量的大小,也就是间隔大小
1317
// 如:目前的跳变精度为 1 秒,那么设置为 60 时,即想要在时间轴上保持 1 分钟的数据。
14-
for (let index = 0; index < 120; index++) {
15-
data.push(randomData());
18+
for (let index = 0; index < 60; index++) {
19+
now = new Date(+now + oneSecond);
20+
analogData.push(randomData(now, 0, 500));
21+
digitalData.push(randomData(now, 0, 1));
1622
}
1723

18-
function randomData() {
19-
now = new Date(+now + oneSecond);
20-
value = value + Math.random() * 21 - 10;
24+
function randomData(time, lower, upper) {
25+
const diff = upper - lower + 1;
26+
const value = Math.floor(Math.random() * diff + lower);
2127
return {
2228
name: now.toString(),
2329
value: [
24-
now,
25-
Math.round(value)
30+
time,
31+
value
2632
]
2733
}
2834
}
2935

3036
let option = {
3137
title: {
32-
text: '动态数据 + 时间坐标轴'
38+
text: '动态数据 + 时间坐标轴',
39+
x: 'center',
3340
},
3441
tooltip: {
3542
trigger: 'axis',
@@ -43,6 +50,10 @@ let option = {
4350
animation: false
4451
}
4552
},
53+
legend: {
54+
data:['模拟量数据', '开关量数据'],
55+
x: 'left'
56+
},
4657
dataZoom: [
4758
{
4859
type: 'slider',
@@ -68,37 +79,94 @@ let option = {
6879
splitNumber: 3,
6980
// boundaryGap: ['20%', '20%']
7081
},
71-
yAxis: {
72-
type: 'value',
73-
boundaryGap: [0, '100%'],
74-
splitLine: {
75-
show: false
82+
yAxis: [
83+
{
84+
name: '模拟量',
85+
type: 'value',
86+
boundaryGap: [0, '100%'],
87+
splitLine: {
88+
show: false
89+
}
90+
},
91+
{
92+
name: '开关量',
93+
max: 8,
94+
type: 'value'
7695
}
77-
},
78-
series: [{
79-
name: '模拟数据',
80-
type: 'line',
81-
showSymbol: false,
82-
hoverAnimation: false,
83-
data: data
84-
}]
96+
],
97+
series: [
98+
{
99+
name: '模拟量数据',
100+
type: 'line',
101+
showSymbol: false,
102+
hoverAnimation: false,
103+
data: analogData
104+
},
105+
{
106+
name: '开关量数据',
107+
yAxisIndex: 1,
108+
type: 'line',
109+
showSymbol: false,
110+
hoverAnimation: false,
111+
data: digitalData
112+
}
113+
]
85114
}
86115

87-
setInterval(() => {
88-
//for (let i = 0; i < 1; i++) {
89-
// data.shift();
90-
// data.push(randomData());
91-
//}
116+
socket.on('Analog', (msg, time) => {
117+
now = new Date(time);
118+
const point = {
119+
name: now.toString(),
120+
value: [
121+
now,
122+
msg
123+
]
124+
}
125+
analogData.shift();
126+
analogData.push(point);
92127

93-
data.shift();
94-
data.push(randomData());
128+
// myChart.setOption({
129+
// series: {data}
130+
// });
131+
myChart.setOption(
132+
{
133+
series: [
134+
{
135+
data: analogData
136+
},
137+
{
138+
data: digitalData
139+
}
140+
]
141+
}
142+
)
143+
});
95144

96-
myChart.setOption({
97-
series: [
98-
{data}
145+
socket.on('Digital', (msg, time) => {
146+
now = new Date(time);
147+
const point = {
148+
name: now.toString(),
149+
value: [
150+
now,
151+
msg
99152
]
100-
});
153+
}
154+
digitalData.shift();
155+
digitalData.push(point);
156+
157+
myChart.setOption(
158+
{
159+
series: [
160+
{
161+
data: analogData
162+
},
163+
{
164+
data: digitalData
165+
}
166+
]
167+
}
168+
)
169+
});
101170

102-
}, 1000);
103171

104172
myChart.setOption(option);

Diff for: echarts/server.js

+49
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,49 @@
1+
const app = require('express')();
2+
const http = require('http').Server(app);
3+
const io = require('socket.io')(http);
4+
5+
app.get('/', (req, res) => {
6+
// res.send('<h1>Hello, world!</h1>');
7+
res.sendFile(__dirname + '/index.html');
8+
});
9+
10+
11+
io.on('connection', (socket) => {
12+
console.log('a user connected');
13+
socket.on('disconnect', () => {
14+
console.log('user disconnected');
15+
});
16+
17+
socket.on('chat message', msg => {
18+
console.log(`message: ${msg}`);
19+
io.emit('chat message', msg);
20+
})
21+
});
22+
23+
function rd(n, m) {
24+
const v = m - n + 1;
25+
return Math.floor(Math.random() * v + n);
26+
}
27+
28+
let now = +Date.now();
29+
const oneSecond = 1000 * 60;
30+
31+
function mockDigital(time) {
32+
io.emit('Digital', rd(0, 1), +time);
33+
}
34+
35+
function mockAnalog(time) {
36+
io.emit('Analog', rd(0, 500), +time);
37+
}
38+
39+
function mockData() {
40+
now = new Date(+now + oneSecond);
41+
mockDigital(now);
42+
mockAnalog(now);
43+
}
44+
45+
setInterval(mockData, 1000);
46+
47+
http.listen(3000, () => {
48+
console.log('listening on *:3000');
49+
});

Diff for: package.json

+1
Original file line numberDiff line numberDiff line change
@@ -47,6 +47,7 @@
4747
"react-addons": "^0.9.1-deprecated",
4848
"redux": "^3.7.2",
4949
"sass-loader": "^6.0.6",
50+
"socket.io-client": "^2.0.3",
5051
"style-loader": "^0.18.2",
5152
"uuid": "^3.1.0",
5253
"webpack": "^3.0.0",

Diff for: react/components/HOC/PeopleList.js

-20
Original file line numberDiff line numberDiff line change
@@ -2,26 +2,6 @@ import React from 'react';
22
import DataComponent from './DataComponent'
33

44
const PeopleList = ({data}) => {
5-
6-
let testA = {
7-
a: 1,
8-
b: {
9-
b1: 2,
10-
b2: {
11-
b3:3
12-
}
13-
}
14-
}
15-
16-
let ccc = {...testA, b: {b2: {b3: 5}}};
17-
console.log(ccc);
18-
ccc.b.b1 = 5;
19-
20-
// let ddd = Object.assign({}, testA, {b: {b1: 3, b2: {b3: 5}}});
21-
// console.log(ddd);
22-
23-
console.log(testA);
24-
255
return (
266
<ol className="people-list">
277
{data.results.map((person, i) => {

Diff for: webpack.config.js

+2-2
Original file line numberDiff line numberDiff line change
@@ -8,8 +8,8 @@ const PORT = 9999;
88
module.exports = {
99
devtool: 'source-map',
1010
// entry: path.resolve(__dirname, './react/components/HOC/index.js'),
11-
entry: path.resolve(__dirname, './echarts/twoGrid.js'),
12-
// entry: path.resolve(__dirname, './echarts/dynamicData.js'),
11+
// entry: path.resolve(__dirname, './echarts/twoGrid.js'),
12+
entry: path.resolve(__dirname, './echarts/dynamicData.js'),
1313
output: {
1414
filename: '[name].js',
1515
path: path.resolve(__dirname, './build')

0 commit comments

Comments
 (0)