首页 > 解决方案 > 在返回响应之前,是否可以通过持久连接发送第二个请求。节点.js

问题描述

我知道这听起来很奇怪,但情况很奇怪。我一直在尝试在第一个响应之前向服务器发送第二个请求(通过同一连接)。我得到的是对第一个请求的响应,而第二个请求被服务器忽略。服务器保持连接活动:

server.on("connection", socket => {
  socket.setTimeout(50 * 1000);
  socket.on("timeout", () => {
    console.log("socket timeout");
    socket.end();
  });

  socket.on("close", hadError => {
    console.log(
      hadError
        ? "Socket closed due to ERROR during transmission"
        : "Socket closed"
    );
  });
});

这是处理请求的路由:

app.post("/enddev", (req, res) => {
  console.log("REQUEST TO ", req.route.path);
  console.log("Req Header ", req.headers);

  res.write("request\r\n");
  setInterval(() => {
    res.write("ack\r\n");
  }, 2000);
});

我认为HTTP 协议不允许这样做,但可能有一些解决方法。

Websockets不是解决方案,因为客户端(不是浏览器)是嵌入式设备。

这是测试的图像(我使用 TCP 客户端程序来模拟来自客户端的请求消息):

在此处输入图像描述

右侧终端(黑色)是节点服务器。白色的是终端。终端上粉红色的是客户端发送的内容。黑色是来自服务器的响应。您可以看到服务器"request"在标头之后立即发送消息。但是在第二次请求时没有出现任何响应。

标签: javascriptnode.jshttpserver

解决方案


我想你从来没有打电话res.end()。没有它,node.js 认为你的回应还没有结束。


推荐阅读