首页 > 解决方案 > 有没有办法缓存 Socket.IO 响应?

问题描述

例如,如果我有这个 websocket:

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 秒流向room_fooJSON 数组中的所有客户端,每 2.5 秒获取数据

现在,问题来了。当我连接到该 WebSocket 时,我必须等待 5 秒钟,直到下一个发射事件发生。

有没有办法可以将先前的响应缓存 X (在这种特定情况下为 5)秒,并在有人连接时一直发出它,这样他们就不会有这样的延迟? 即使新用户连接(他们没有浏览器缓存) - 我的意思是服务器缓存

标签: javascriptnode.jssocket.io

解决方案


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));
  })
});

所以加入一个回调函数使用它:)

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


推荐阅读