如果与之前的传输不同,如何仅通过websocket传输数据

时间:2014-06-07 23:44:51

标签: javascript node.js express socket.io closures

我使用NodeJS + Express构建了一个简单的Web应用程序,请求和socket.io模块从外部API获取JSON数据,然后使用websocket将其传输到客户端。

如果外部请求的JSON数据发生了变化,我想做的只是通过websocket进行传输。

我无法弄清楚如何使用我目前提出的代码添加此条件:

io.on('connection', function (socket) {
 setInterval(function () {
  request({
   url: url,
   json: true
  }, function (error, response, body) {
   var senddata = JSON.stringify(body.result).toLowerCase();
   if (!error && response.statusCode === 200) {
    socket.emit('result', senddata);
   }
  })
 }, 3000)
});

1 个答案:

答案 0 :(得分:0)

您可以将每个套接字的最后数据存储在对象中,然后将其与senddata进行比较:

var lastData = {};  //declare an object
io.on('connection', function (socket) {
 setInterval(function () {
  request({
   url: url,
   json: true
  }, function (error, response, body) {
   var senddata = JSON.stringify(body.result).toLowerCase();
   if (!error && response.statusCode === 200) {
    if (senddata !== lastData[socket.id]) {  //compare senddata with last data
     lastData[socket.id] = senddata;   //store new last data
     socket.emit('result', senddata);
    }
   }
  })
 }, 3000)
});

希望这有帮助。