Como o título indica, mesmo depois de ler a documentação, não está claro para mim qual é a diferença entre unref()
, quit()
e end()
.
end()
parece fechar uma conexão sem esperar que todos os soquetes sejam fechados.
unref()
parece esperar que todos os comandos terminem.
quit()
parece ser semelhante a unref()
.
unref()
não tem um tempo limite, é garantido que ele terminará ou devo definir um tempo limite?end
chamado incondicionalmente daquele que eu chamei?end()
é projetado para uso onde você está encerrando o aplicativo AGORA, por exemplo, um manipulador uncaughtException
, e não antecipa ou deseja esperar (se houver) respostas de comandos que você pode ter enviado que ainda não voltaram do Redis.
quit()
foi projetado para quando você terminar com esta conexão e quiser fechá-la, mas permitir que a atividade inacabada seja concluída. Na maioria dos casos, se você estiver tentando encerrar a conexão, use quit()
unref()
não foi projetado para competir com essas opções, mas simplesmente para permitir que seu aplicativo seja encerrado se a única coisa assíncrona restante for o cliente Redis. Normalmente, esse é o caso de algum tipo de script em que você faz uma consulta em lote ou um teste que se conecta ao Redis. Ele se comporta de forma idêntica ao unref
aqui http://nodejs.org/api/net.html#net_server_unref
Então o evento end
só é emitido quando você chama quit()
aparentemente. Não sei exatamente por que sem pesquisa.
se você não parar, nunca o que acontecer.
@techsin Se você nunca fechar a conexão do Redis, seu aplicativo de nó ficará sentado e aguardará para sempre conectado ao servidor Redis.
e se o aplicativo foi encerrado, mas o servidor redis ainda está ativo. isso faria o servidor redis manter a referência? seria uma espécie de vazamento de memória
desculpe, eu não estava claro na primeira vez
Não, se o aplicativo for fechado, ele encerrará a conexão do cliente e o servidor Redis encerrará a referência em seu lado, sem vazamento de memória.
Comentários muito úteis
end()
é projetado para uso onde você está encerrando o aplicativo AGORA, por exemplo, um manipuladoruncaughtException
, e não antecipa ou deseja esperar (se houver) respostas de comandos que você pode ter enviado que ainda não voltaram do Redis.quit()
foi projetado para quando você terminar com esta conexão e quiser fechá-la, mas permitir que a atividade inacabada seja concluída. Na maioria dos casos, se você estiver tentando encerrar a conexão, usequit()
unref()
não foi projetado para competir com essas opções, mas simplesmente para permitir que seu aplicativo seja encerrado se a única coisa assíncrona restante for o cliente Redis. Normalmente, esse é o caso de algum tipo de script em que você faz uma consulta em lote ou um teste que se conecta ao Redis. Ele se comporta de forma idêntica aounref
aqui http://nodejs.org/api/net.html#net_server_unref