【问题标题】:Nodejs simple socket connection doesn't workNodejs简单套接字连接不起作用
【发布时间】:2018-11-12 09:21:19
【问题描述】:

客户端每 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);
  });
});

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

客户端,它包裹在一个 2sec setTimeout() 函数中:

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

【问题讨论】:

  • 将 socket.io 与 express 集成的方式有点不同。查看初始设置的文档 - socket.io/get-started/chat
  • 我正在使用网络套接字。我想它们与socket.io不同?在我的客户端,我只是使用 jquery 获取请求。
  • 是的,它们是不同的。您能否分享您调用此端点的客户端代码
  • 我更新了问题。可能是完全 bs,我是 node.js 的初学者
  • 您正在使用/query_data api 创建新的套接字连接,但打错了。查看此链接以实现gist.github.com/tedmiston/5935757

标签: node.js asynchronous get client-server


【解决方案1】:

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

使用res.end(data) 而不是res.send(data)为我完成了这项工作。

【讨论】:

    猜你喜欢
    • 2016-07-01
    • 1970-01-01
    • 2023-01-20
    • 1970-01-01
    • 2013-09-29
    • 2018-10-26
    • 2010-10-10
    • 2012-01-11
    • 1970-01-01
    相关资源
    最近更新 更多