【问题标题】:How to execute code after callback function has finished?回调函数完成后如何执行代码?
【发布时间】:2022-11-01 17:48:23
【问题描述】:

我需要知道在每个回调函数结束后如何执行代码行。

我正在使用rcon 包将 rcon 命令发送到托管 Counter Strike 1.6 服务器的半条命专用服务器 (HLDS) 并获取响应。问题是有时响应被分成几部分(我认为这是由于与 UDP 的连接,TCP 不起作用)。首先,我在 conn.on() 中使用 res.send() 和事件“响应”回调函数,但我收到错误消息说无法发送 HTTP 标头。 我了解了 res.write(),它可以保存我需要的内容,然后再使用 res.send()。但是我不知道在所有“响应”都回来之后我可以使用 res.send() 的正确位置在哪里。我尝试在 conn.connect() 和其他地方之后使用该命令,但它没有奏效。

app.post("/", function(req, res) {

    var resp = "";
    var ip = req.body.serverip;
    var pass = req.body.pass;
    var command = req.body.command;

    var options = {
      tcp: false,
      challenge: true
    };

    var conn = new Rcon(ip, 27015, pass, options);

    conn.on('auth', function () {
      // You must wait until this event is fired before sending any commands,
      // otherwise those commands will fail.
      console.log("Authenticated");
      console.log("Sending command:" + command);
      conn.send(command);

    });

    conn.on('response', function(str)  {
        console.log("Response: "+str);
        res.write(str);
    });

    conn.on('error', function (err) {
      console.log("Error: " + err);
    });

    conn.on('end', function () {
      console.log("Connection closed");
      process.exit();
    });

    conn.connect();
});

【问题讨论】:

  • RCON 客户端与 RCON 服务器建立连接一次然后收到许多回应。相比之下,HTTP 客户端使请求和接收回复。目前尚不清楚您希望如何将这两者结合在一起。您想使用您为响应 POST / 请求而共享的代码构建什么 HTTP 响应?
  • 我想取回所有响应并将它们发送到一个简单的 HTML 页面。例如,当服务器有很多玩家或已满时,使用带有 rcon 的 status 命令,响应分为多个部分,这对于控制台来说很好。我想知道如何在它们完成后使用多个响应并将它们一起发送。
  • 如果有多个部分,你如何识别最后一个部分?

标签: javascript node.js npm rcon


【解决方案1】:

如果要将响应部分“流式传输”到 HTML 页面,可以使用以下命令:

res.setHeader("Content-Type", "text/html; charset=UTF-8");
res.write("<!DOCTYPE html><html><body>"); // start an HTML page
conn.on('response', function(str) {
  res.write(str);
});

您甚至在第一个响应到来之前发出的 HTML 页面的基本开始,会导致浏览器在您将它们写入页面时显示传入响应的文本。 (另见here。)

在最后一个响应之后,您可以完成页面

res.end("</body></html>");

但是即使没有“最后”响应,这仍然有效:在这种情况下,浏览器会继续等待更多,因此页面永远不会完成,但您仍然可以阅读到目前为止的内容。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-10-30
    • 2015-12-04
    • 2012-07-01
    • 2020-11-06
    • 2020-01-31
    • 2014-06-10
    • 2013-08-21
    • 1970-01-01
    相关资源
    最近更新 更多