Node.js简单套接字连接不起作用

时间:2018-11-12 09:21:19

标签: node.js asynchronous get client-server

客户端每2秒请求数据app.get("/query_data"..  我正在连接到特定的IP地址+端口。

连接后,我正在向此地址发送一个字符串以从中接收数据。效果很好,但只有一次。

var socket = new net.Socket();
app.get("/query_data", function (req, res) {
  socket.connect(2711, '192.168.1.173', function (err) {
    if (err) {
      console.log(err);
    }
    else {
      socket.write("d"); // send "d" to trigger socket.on("data")
    }
  });

  socket.on('data', function (data) {
    res.send(data);
  });
});

我收到的错误消息:

  

错误[ERR_HTTP_HEADERS_SENT]:发送标头后无法设置标头   给客户

但是,当我将var socket = new net.Socket();放在app.get()内时,它可以工作。

app.get("/query_data", function (req, res) {
  var socket = new net.Socket();
  socket.connect(2711, '192.168.1.173', function (err) {
    if (err) {
      console.log(err);
    }
    else {
      socket.write("d");
    }
  });

  socket.on('data', function (data) {
    res.send(data);
  });
});

那是为什么?我不想每次客户端从服务器请求数据时都创建一个新的套接字。

客户端,其包裹在2秒的setTimeout()函数中:

  $.get("/query_data", function (data) {
      data = data.replace(/[\[\]&]+|nan/g, 'null');
      console.log(JSON.parse(data));
      (....)
  });

1 个答案:

答案 0 :(得分:0)

您需要确保结束响应过程。

使用res.end(data)代替res.send(data)为我完成了工作。