Node.js正确套接字关闭

时间:2016-06-09 19:21:30

标签: node.js sockets

如果客户端超时或我想因其他原因关闭客户端连接,我想正确关闭套接字连接。通过恰当的意思是:

  1. 客户知道它不应该发送任何进一步的信息
  2. 服务器端完全关闭连接(因为攻击者仍然可能会向我们不想阅读的服务器发送数据)
  3. 首先,我考虑使用socket.destroy(),这将确保不再发生I / O活动。当我尝试这个时,我注意到客户端没有得到关于此的通知。很可能是因为它无法知道连接已经关闭,因为没有任何内容发送给客户端,对吗?

    因为我认为发出socket.end()并在发出socket.destroy()之后立即发送。这次客户端正常关闭,但它触发了socket.end()事件两次。 为什么会这样?这是迫使套接字关闭的正确方法,还是我遗漏了什么?

    服务器代码:

    sock.on('destroy', function() {
        console.log(sock.remoteAddress + ' has been destroyed');
    });
    
    sock.on('end', function() {
        console.log(sock.remoteAddress + ' has been half closed');
    });
    
    sock.on('timeout', function() {
        console.log(sock.remoteAddress + " timed out");
        sock.emit('end');
        sock.emit('destroy');
    });
    

0 个答案:

没有答案