當(dāng)客戶端登錄時(shí),該客戶端的數(shù)據(jù)將存儲(chǔ)在服務(wù)器中以供進(jìn)一步使用,但是當(dāng)新客戶端登錄時(shí),舊客戶端的數(shù)據(jù)將被新客戶端替換。因此,如果我將客戶的數(shù)據(jù)存儲(chǔ)在var或let中,它只屬于一個(gè)特定的客戶。我這樣做是為了減少新 API 調(diào)用的加載時(shí)間,并在重新加載網(wǎng)頁(yè)時(shí)從活動(dòng)用戶列表中刪除用戶(因?yàn)?socket.io 再次使用新的 socketID 連接)關(guān)于我的代碼,這是我在網(wǎng)站啟動(dòng)時(shí)的第一個(gè) API 調(diào)用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 '循環(huán)是耗時(shí)的事情,所以對(duì)于下一個(gè)API調(diào)用,我使用這個(gè)方法來(lái)獲得更好的性能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); }};這種方法比前一種方法快得多,但要做到這一點(diǎn),我必須將“列表”存儲(chǔ)在服務(wù)器中。這里的問(wèn)題是當(dāng)一個(gè)新用戶(假設(shè)它是user1)登錄時(shí),第一個(gè) API 將被調(diào)用,' find ' 函數(shù)將被執(zhí)行,它將生成 ' user1 ' 的 ' list '。這里一切都很好現(xiàn)在一個(gè)已經(jīng)登錄的老用戶(假設(shè)它是user2)在不同的網(wǎng)頁(yè)中調(diào)用 API。服務(wù)器應(yīng)該使用“user2”的“l(fā)ist”執(zhí)行“refreshfind” 。但是因?yàn)樵凇?user2 ”調(diào)用 API 之前, “ user1 ”已登錄,執(zhí)行“ find ”并為“ user1 ”創(chuàng)建了一個(gè)“ list ” ,現(xiàn)在“ user1 ”的“ list ”正在由“ user2 ”調(diào)用的 API的“ refreshfind ”更新以同樣的方式在網(wǎng)頁(yè)重新加載時(shí)從“活動(dòng)用戶列表”(數(shù)組)中刪除用戶。當(dāng)網(wǎng)頁(yè)重新加載時(shí),socket.io 執(zhí)行斷開(kāi)連接并使用新的 socket.id 重新連接 socket.on("disconnect", ()...因此,刪除重新加載頁(yè)面的用戶的功能是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"); });
如何將客戶端的數(shù)據(jù)存儲(chǔ)在服務(wù)器中
一只名叫tom的貓
2022-10-13 16:27:47