【问题标题】:How to wait for new information from a node.js server如何等待来自 node.js 服务器的新信息
【发布时间】: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


【解决方案1】:

有一个名为“websockets”的协议。您需要使用它而不是 HTTP。

【讨论】:

    【解决方案2】:

    尝试使用socket.io而不是ajax/https调用,我认为会更高效。

    【讨论】:

      猜你喜欢
      • 2022-08-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-12-20
      • 2015-05-22
      • 2014-12-15
      相关资源
      最近更新 更多