为了账号安全,请及时绑定邮箱和手机立即绑定

如何将客户端的数据存储在服务器中

如何将客户端的数据存储在服务器中

一只名叫tom的猫 2022-10-13 16:27:47
当客户端登录时,该客户端的数据将存储在服务器中以供进一步使用,但是当新客户端登录时,旧客户端的数据将被新客户端替换。因此,如果我将客户的数据存储在var或let中,它只属于一个特定的客户。我这样做是为了减少新 API 调用的加载时间,并在重新加载网页时从活动用户列表中删除用户(因为 socket.io 再次使用新的 socketID 连接)关于我的代码,这是我在网站启动时的第一个 API 调用var list;var find = (req, res) =>  new Promise((resolve, reject) => {    user.find({}, { _id: 1, name: 1, email: 1 }).exec(async (err, user) => {      if (err) return res.json(err);      let p = await getfulluser(req.User._id);       list = user.filter((u) => u._id != req.User._id);      for (let i = 0; i < p.messages.length; i++) {        for (var e = 0; e < list.length; e++) {          if (list[e]._id.equals(p.messages[i]._id)) {            list.splice(e, 1);            break;          }        }      }      res.json(list);      resolve(list);    });  });这里那些' for '循环是耗时的事情,所以对于下一个API调用,我使用这个方法来获得更好的性能exports.refreshfind = async (req, res) => {  if (list) {    let { id } = req.body;    for (let e = 0; e < list.length; e++) {      if (list[e]._id.equals(id)) {        list.splice(e, 1);        res.json(list);        break;      }    }  } else {    await find(req, res);  }};这种方法比前一种方法快得多,但要做到这一点,我必须将“列表”存储在服务器中。这里的问题是当一个新用户(假设它是user1)登录时,第一个 API 将被调用,' find ' 函数将被执行,它将生成 ' user1 ' 的 ' list '。这里一切都很好现在一个已经登录的老用户(假设它是user2)在不同的网页中调用 API。服务器应该使用“user2”的“list”执行“refreshfind” 。但是因为在“ user2 ”调用 API 之前, “ user1 ”已登录,执行“ find ”并为“ user1 ”创建了一个“ list ” ,现在“ user1 ”的“ list ”正在由“ user2 ”调用的 API的“ refreshfind ”更新以同样的方式在网页重新加载时从“活动用户列表”(数组)中删除用户。当网页重新加载时,socket.io 执行断开连接并使用新的 socket.id 重新连接 socket.on("disconnect", ()...因此,删除重新加载页面的用户的功能是var userdata = require("./controllers/user"); socket.on("disconnect", () => {    if (userdata !== undefined && users !== undefined) {      for (e = 0; users.length; e++) {        if (users[e].userid === userdata.userdata._id) {          users.splice(e, 1);          break;        }      }    }    console.log(users);    console.log("disconnected");  });
查看完整描述

1 回答

?
手掌心

TA贡献1942条经验 获得超3个赞

服务器仅适用于客户端队列中的一个客户端。当您为客户端存储变量(var 或 let)时,当新客户端到来时,这些变量将为新客户端更改。因此,您不应该在变量中存储有关客户端的任何内容

您可以使用Redis存储来自服务器的每个客户端的数据,它比 HTTP 请求更快,因此您将获得更好的性能。


查看完整回答
反对 回复 2022-10-13
  • 1 回答
  • 0 关注
  • 100 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信