Как поддерживать сетевое соединение в Node.js для неограниченных запросов - PullRequest
0 голосов
/ 25 октября 2019

Я хочу установить соединение на Nodejs неограниченное количество раз. Например, я что-то пишу на каком-то сервере и после записи на сервере, сервер отправляет мне ответ об ошибке (как и ожидалось от сервера) и отключается. Но я хочу снова установить соединение с этим сервером и снова хочу отправить запрос с другими параметрами. Я не уверен, где и какую логику / код нужно поместить в следующий сегмент кода, чтобы я мог делать неограниченные запросы.

var net = require('net');
var HOST = '40.14.121.178'
var PORT = 12537;
var byteToSend = [0x56, 0x34, ...]

var client = new net.Socket();
client.connect(PORT, HOST, function() {
    console.log('CONNECTED TO: ' + HOST + ':' + PORT);
   client.write(byteToSend);
});

client.on('data', function(data) { 
    console.log('DATA: ' + data);
    client.destroy(); 

});

client.on('close', function() {
    console.log('Connection closed');
});

РЕДАКТИРОВАНИЕ : на самом деле, я хочу установить другое соединение при разъединении, как в следующем стиле (что я считаю неправильным)

client.on('close', function() {
    console.log('Connection closed');
client.connect(PORT, HOST, function() {
        console.log('again CONNECTED TO: ' + HOST + ':' + PORT);
        client.write(byteToSend);
    });
});

выше повторного повышения соединения после ошибки.

Ответы [ 2 ]

1 голос
/ 26 октября 2019

Я не думаю, что вы можете повторно использовать существующее клиентское соединение для подключения снова. Поэтому вы захотите обернуть все это в красивое замыкание / функцию, которую вы можете вызвать снова, чтобы создать новый сокет и подключиться.

Попробуйте что-то вроде этого:

var net = require('net');
var HOST = '40.14.121.178'
var PORT = 12537;
var byteToSend = [0x56, 0x34, ...]

function connect() {

  var client = new net.Socket();
  client.connect(PORT, HOST, function() {
      console.log('CONNECTED TO: ' + HOST + ':' + PORT);
     client.write(byteToSend);
  });

  client.on('data', function(data) { 
      console.log('DATA: ' + data);
      client.destroy(); 

  });

  client.on('close', function() {
      console.log('Connection closed');
      connect();
  });
}

connect();
0 голосов
/ 25 октября 2019

Если я правильно понял, вы хотите, чтобы ваш сервер был включен для запросов в течение некоторого времени, не ожидая трехстороннего рукопожатия и т. Д. Для этого вы должны использовать атрибут keep-alive, подобный этому.

const net = require('net');
const HOST = '40.14.121.178'
const PORT = 12537;
const byteToSend = [0x56, 0x34, ...];

const server = net.createServer(client => {

    client.setKeepAlive(true, 60000); // milliseconds.

    client.on('data', data => {
       console.log(`DATA: ${data}`);
       client.destroy(); 
    });

    client.on('end', data => {
       console.log('Connection closed');
    });

    client.on('connect', data => {
       client.write(byteToSend);
    });

    client.on('error', err => {
       console.log(`Error: ${err.message}`);
    })
});

server.listen(PORT, HOST, () => {
    console.log("server started");
});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...