什么时候结束'或者'关闭'在tls.connect上调用

时间:2017-06-14 20:45:32

标签: node.js

对于这样的例子: https://bravenewmethod.com/2011/02/21/node-js-tls-client-example/

或在我自己的代码中:

client = tls.connect(port, host, tlsOptions, function() {

}

client.on('end', function(data) {

}

这些生命周期方法何时被实际调用?在文档https://nodejs.org/api/tls.html中,我没有看到任何相关内容。谢谢。

2 个答案:

答案 0 :(得分:3)

您需要在文档中查找TLS套接字继承的TCP套接字的Net模块。 tls.TLSSocketnet.Socket的子类。对于类层次结构的文档而言,这是一个常见问题,您不会意识到基类文档中记录了很多内容。在that doc中,它为end事件说明了这一点:

  

当套接字的另一端发送FIN数据包时发出,因此   结束套接字的可读面。

     

默认情况下(allowHalfOpen为false)套接字将发送FIN数据包   一旦写出文件描述符就返回并销毁它   待写队列。但是,如果allowHalfOpen设置为true,则   套接字不会自动结束()它的可写端,允许   用户写入任意数量的数据。用户必须调用end()   显式关闭连接(即发回FIN数据包)。

对于close事件,that same doc说明了这一点:

  

插座完全关闭后发出。参数had_error是一个   boolean,表示套接字由于传输而关闭   错误。

这意味着close事件发生在end事件之后,因为在收到end事件时套接字可能仍然至少部分打开。

因此,当对方告诉您它不再接受数据(收到FIN数据包)时,您将获得end,当套接字现在完全关闭时,您将获得close。 / p>

答案 1 :(得分:0)

tls.TLSSocket类是net.Socket类的实例。您可以在该文档中找到有关事件和方法的其他信息(https://nodejs.org/api/net.html#net_class_net_socket)。最有可能的是net.Socket#end如果我不得不猜测。