【问题标题】:Node.js - EventListener - Only catch close event of a socket that triggered data eventNode.js - EventListener - 仅捕获触发数据事件的套接字的关闭事件
【发布时间】:2021-08-02 21:22:47
【问题描述】:

每次关闭套接字并触发“数据”事件时,我都需要记录到一个文件(我目前正在使用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);

问题是,当我在相关端口上侦听时,许多从未触发“数据”事件(我不感兴趣)的套接字也被关闭,这给了我一个巨大的日志过载不可用。我只想记录触发“数据”事件的套接字的关闭。这可能吗?

【问题讨论】:

    标签: node.js tcp event-listener


    【解决方案1】:

    是的!您可以在事件侦听器上方保留一个变量(例如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);
    

    【讨论】:

    • 我确信我已经尝试过这种风格的东西。但确实有效,谢谢!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-07-27
    • 1970-01-01
    • 2013-10-10
    • 2015-11-23
    • 2019-09-12
    • 1970-01-01
    • 2023-01-14
    相关资源
    最近更新 更多