Простое сокетное соединение Nodejs не работает - PullRequest
0 голосов
/ 12 ноября 2018

Каждые 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 голосов
/ 13 ноября 2018

Вам необходимо убедиться, что вы завершили процесс ответа.

с использованием res.end(data) вместо res.send(data) сделали всю работу за меня.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...