亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

如何將客戶端的數據存儲在服務器中

如何將客戶端的數據存儲在服務器中

一只名叫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 關注
  • 115 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號