使用socket.io实时动态更新图表

时间:2019-06-02 17:44:38

标签: javascript node.js dynamic socket.io chart.js

我有一个基本的node.js网络服务器。连接的客户端可以将值发送到服务器。服务器将它们存储在一个数组中。该数组将每1/25秒发送回客户端,客户端使用此数组绘制图表。因此,每个客户都可以实时看到更新的图表。但是很遗憾,客户没有绘制图表。

我尝试了什么: 客户端发出一个事件,并将一个值发送到服务器。服务器侦听此事件并将值存储在数组中。使用setInterval,服务器每1/25秒向客户端发出一次阵列。客户端获取数组并绘制图表。

client.js:

var numbers = [];
var context = document.getElementById("chart");
var config = {
  type: 'doughnut',
  data: {
    datasets: [
       {
       backgroundColor: ['orange', 'blue', 'yellow'],
       data: numbers,
       borderWidth: 0,           
       }
    ]
  },
  options: {
       responsive: false,
  }    
}
var chart = new Chart(context, config);

const socket = io();

var someValue = 7;

socket.emit('add', someValue);

socket.on('update', (arr) => {
    numbers = arr;
    console.log(numbers);
});

server.js:

const chartArray = [];

io.on('connection', (socket) => {
    socket.on('add', (data) => {
        chartArray.push(data);
    }); 

    setInterval(function() {
        socket.emit('update', chartArray);
    },1000/25);
});

当我将数字数组记录在客户端的控制台中时,它将起作用。服务器每1/25秒向客户端发射一次阵列,客户端获得阵列。但是该图表不会绘制。

1 个答案:

答案 0 :(得分:0)

因为您没有更新图表

chart.data.datasets.data = arr;
chart.update();