Вызывайте функцию каждый раз, когда клиент простаивает - PullRequest
0 голосов
/ 08 июля 2019

Первый раз попробовал TCP и сделал программу, которая возвращает квадрат числа, отправленного клиентом.

Как спрашивать у клиента номер каждый раз, когда он простаивает в течение 'n' секунд?

Я попробовал метод setTimeout, но он срабатывает по истечении этих 'n' секунд, а затем снова не запускается.

Клиент:

const net = require('net');
const readline = require('readline').createInterface({
    input: process.stdin,
    output: process.stdout
});

const options = {
    port : 1234
};

const client = net.createConnection(options, () => {
    console.log("Connected to server")
});

client.on('data', (data) => {
    console.log(data.toString());
});

client.setTimeout(2000, () => {
    readline.question('Number to be squared: ',(num) => {
        client.write(num);
    });
});

Сервер:

const net = require('net');
const port = 1234;

const server = net.createServer(conn => {
    console.log('New client joined');

    conn.on('data', (data) => {
        console.log(`Data received from client: ${data}`)
        data = parseInt(data);
        data = Math.pow(data,2);
        conn.write('From server- '+data.toString());
    });

    conn.on('end',() => {
        console.log('Connection stopped');
    });

    conn.on('error',(e) => {
        console.log('Connection stopped-', e.message);
    });
});

server.listen(port);

1 Ответ

1 голос
/ 08 июля 2019

Вам необходимо прослушать событие timeout, обратный вызов будет вызван только один раз. Из doc:

Необязательный параметр обратного вызова будет добавлен как одноразовый слушатель для события 'timeout'.

socket.setTimeout(3000);//setting here.
socket.on('timeout', () => {
  console.log('socket timeout');
  socket.end();
});
...