【发布时间】:2021-03-09 08:37:15
【问题描述】:
所以我正在制作一个小型聊天大厅项目。但是我在获取人们发送到服务器的消息时遇到问题,返回给客户端以在站点上显示它们。它有点像这样使用循环:
//Client side
setInterval(() => {
let ajax = new XMLHttpRequest()
ajax.onreadystatechange = function () {
if (this.readyState == 4 && this.status == 200) {
serverMessages = JSON.parse(ajax.responseText);
if (serverMessages.join("") !== clientmessages.join("")) {
let newMessages = arrDiff(clientmessages, serverMessages)
clientmessages = serverMessages
newMessages.forEach(msg => {
chatText.innerHTML += `<ul>${msg.name}: ${msg.message}</ul>`
})
}
}
};
ajax.open("GET", `/message?code=${getUrlParam("code")}`, true)
ajax.send()
}, 100)
//Server side
app.get("/message", (req, res) => {
res.send(lobbies.get(req.query.code).messages)
})
但这显然非常糟糕,如果您开始发送垃圾邮件,或者加入的客户端过多,它会使服务器的请求超载,从而导致各种错误。
所以我问,我怎样才能做得更好?或者有没有办法等到服务器得到新信息?
【问题讨论】:
-
你必须使用 websocket。研究http websockets,例如socket.io库。
-
哦,我明白了...谢谢!
-
即使您的方法很幼稚,每秒向服务器询问 10 次确实不是一个好主意。
标签: javascript node.js ajax express