有没有一种方法可以缓存Socket.IO响应?

时间:2020-06-07 14:50:14

标签: javascript node.js socket.io

例如,如果我有这个网络套接字:

let itemsArray = [];

function fetchData() {
  itemsArray = await db.query(`SELECT * FROM Items`);
}

function emitData() {
  io.sockets.in("room_foo").emit("data", JSON.stringify(itemsArray));
}

setInterval(() => fetchData(), 2500);
setInterval(() => emitData(), 5000);

基本上,这意味着:每5秒流向JSON数组room_foo中的所有客户端,并每2.5秒获取数据

现在,这就是问题所在。当我连接到该WebSocket时,我必须等待5秒钟,直到下一次发出事件发生。

有没有一种方法可以将以前的响应缓存X X(在这种情况下为5)秒,并在有人连接的情况下始终发出该响应,因此他们不会有这么晚吗? 即使有新用户连接(他们也没有浏览器缓存)-我的意思是服务器缓存

1 个答案:

答案 0 :(得分:1)

let itemsArray = [];

function fetchData() {
  itemsArray = await db.query(`SELECT * FROM Items`);
  io.sockets.in("room_foo").emit("data", JSON.stringify(itemsArray));
}
setInterval(() => fetchData(), 2500);

io.on('connection', (socket) => {
  // if user gets in to room_foo then send it so
  socket.join('room_foo', () => {
    io.sockets.in("room_foo").emit("data", JSON.stringify(itemsArray));
  })
});

因此,请加入使用回调函数的功能:)

也许会像这样更新您的代码?