就像标题所示,即使阅读了文档,我也不清楚unref()
, quit()
和end()
之间的区别。
end()
似乎在不等待所有套接字关闭的情况下关闭连接。
unref()
似乎在等待所有命令结束。
quit()
似乎类似于unref()
。
unref()
没有超时,因此可以保证结束还是应该设置超时?end
事件吗?end()
设计用于现在要终止应用程序的地方,例如uncaughtException
处理程序,并且不要期待或不想等待(可能有)您可能发送的命令的答复还没有从Redis回来的。
quit()
设计用于完成此连接并希望将其关闭的情况,但允许未完成的活动完成。 在大多数情况下,如果您尝试终止连接,请使用quit()
unref()
并非旨在与这些选项竞争,而是仅在剩余的唯一异步对象是Redis客户端的情况下允许您的应用程序退出。 在执行批处理查询或连接到Redis的测试的某种脚本中,通常会出现这种情况。 它的行为与此处的unref
http://nodejs.org/api/net.html#net_server_unref
然后,仅当您调用quit()
时,才会发出end
事件。 不知道为什么没有研究。
如果您不打电话退出,那会发生什么。
@techsin如果您从不关闭Redis连接,则您的节点应用程序将坐下来,并等待永远连接到Redis服务器。
如果应用程序已关闭但redis服务器仍在运行该怎么办。 这会使redis服务器保留引用吗? 那会有点内存泄漏
抱歉,我第一次不清楚
不会,如果应用程序关闭,它将终止客户端连接,而Redis服务器将在其端终止引用,因此不会发生内存泄漏。
最有用的评论
end()
设计用于现在要终止应用程序的地方,例如uncaughtException
处理程序,并且不要期待或不想等待(可能有)您可能发送的命令的答复还没有从Redis回来的。quit()
设计用于完成此连接并希望将其关闭的情况,但允许未完成的活动完成。 在大多数情况下,如果您尝试终止连接,请使用quit()
unref()
并非旨在与这些选项竞争,而是仅在剩余的唯一异步对象是Redis客户端的情况下允许您的应用程序退出。 在执行批处理查询或连接到Redis的测试的某种脚本中,通常会出现这种情况。 它的行为与此处的unref
http://nodejs.org/api/net.html#net_server_unref