例如,如果我有这个网络套接字:
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)秒,并在有人连接的情况下始终发出该响应,因此他们不会有这么晚吗? 即使有新用户连接(他们也没有浏览器缓存)-我的意思是服务器缓存
答案 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));
})
});
因此,请加入使用回调函数的功能:)
也许会像这样更新您的代码?