【问题标题】:How to catch TCP socket transmission failures in Node.JS?如何在 Node.JS 中捕获 TCP 套接字传输失败?
【发布时间】:2017-09-19 20:01:33
【问题描述】:

当我将数据写入Node中的TCP套接字时,该套接字没有关闭但另一端的客户端不再连接(例如由于网络故障),我怎么知道?

在这种情况下,我不会触发套接字的错误事件。如果我是对的,TCP 放弃发送数据,如果绝对没有来自另一端的 ACK 数据包,不是吗?还是我误会了什么?

【问题讨论】:

    标签: node.js networking tcp


    【解决方案1】:

    Nodejs Net documentation 中所述。 套接字事件是closeconnectdatadrainenderrorlookuptimeout

    由于您没有收到error 事件,请尝试侦听当套接字的另一端发送FIN 数据包时发出的end 事件。

    socket.on('end', () => console.log('socket has ended'))
    

    或者,如果您预计会出现网络故障或其他不可预测的网络边缘情况;您可以随时设置超时并以这种方式处理。

    socket.setTimeout(60000) // 60 seconds
    socket.on('timeout', () => {
      console.warn('socket has timed out')
      socket.write('socket has timed out')
      socket.end()
    })
    

    【讨论】:

      【解决方案2】:

      close event 侦听器传递了一个 hadError 参数,指示套接字是否由于传输错误而关闭。例如:

      socket.on('close', hadError => {
        if (hadError) {
          // Handle transmission error here
        }
      });
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-03-31
        • 1970-01-01
        • 1970-01-01
        • 2013-05-14
        • 2012-12-15
        • 2011-09-17
        相关资源
        最近更新 更多