每当客户端闲置时调用函数

时间:2019-07-08 14:18:15

标签: node.js tcp client

第一次尝试使用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 个答案:

答案 0 :(得分:1)

您需要监听timeout事件,回调仅被调用一次。来自doc

  

可选的回调参数将作为“超时”事件的一次性监听器添加。

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