javascript - 有没有办法缓存 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_foo
JSON 数组中的所有客户端,每 2.5 秒获取数据
现在,问题来了。当我连接到该 WebSocket 时,我必须等待 5 秒钟,直到下一个发射事件发生。
有没有办法可以将先前的响应缓存 X (在这种特定情况下为 5)秒,并在有人连接时一直发出它,这样他们就不会有这样的延迟? 即使新用户连接(他们没有浏览器缓存) - 我的意思是服务器缓存
解决方案
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));
})
});
所以加入一个回调函数使用它:)
也许像这样更新您的代码?
推荐阅读
- php - 使用 PHP 正确更新行
- python - 如何链接两个熊猫数据框进行简单计算
- android - Android 自定义项目模板未显示在“创建新项目”对话框中
- google-apps-script - 收听收到的 Gmail 电子邮件并上传到 Cloud Storage
- vue.js - 不能只更改 datepicker 的一个面板值
- docusignapi - Docusign 授予访问令牌以使用 JWT 授予服务集成
- python - 要保存在 .txt 中的 tkinter 文本框条目
- vba - Range.ParagraphFormat.Alignment 不起作用(对我来说)
- firebase - 使用苹果登录 - firebase 身份验证,providerData 为空
- javascript - Swiper.js - 链接两个滑块实例?