【问题标题】:Call a function everytime the client is idle每次客户端空闲时调用一个函数
【发布时间】:2019-11-18 02:04:19
【问题描述】:

第一次尝试 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);

【问题讨论】:

    标签: node.js tcp client


    【解决方案1】:

    你需要监听timeout事件,回调只会被调用一次。来自doc

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-06-27
      • 1970-01-01
      • 2022-09-30
      • 2015-07-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多