Node.js - EventListener - 仅捕获触发数据事件的套接字的关闭事件

Node.js - EventListener - Only catch close event of a socket that triggered data event

每次关闭套接字并触发 'data' 事件时,我都需要记录到一个文件(我目前正在使用 winston)。 这是我的代码:

net.createServer(function (socket)
{
    var remoteAdressPort = socket.remoteAddress + " - " + socket.remotePort;
    socket.on('data', function (data)
    {
        [...] // some treatments
    });

    socket.on('close', function() {
        logger.info("Socket has been closed : " + remoteAdressPort);
    });


}).listen(port);

问题是当我在有问题的端口上监听时,许多从未触发 'data' 事件(并且我不感兴趣)的套接字也被关闭,这给了我一个无法使用的巨大日志过载。我只想记录触发 'data' 事件的套接字的关闭。这可能吗?

是啊!您可以将变量保持在事件侦听器(例如 sentData)之上的范围,并在数据事件通过时将其变为 true,然后您可以在 close 事件中检查。

net.createServer(function (socket)
{
    let sentData = false;
    var remoteAdressPort = socket.remoteAddress + " - " + socket.remotePort;
    socket.on('data', function (data)
    {
        sentData = true;
        [...] // some treatments
    });

    socket.on('close', function() {
        if (sentData) {
            logger.info("Socket has been closed : " + remoteAdressPort);
        }
    });


}).listen(port);