Comme le titre l'indique, même après avoir lu la documentation, je ne sais pas quelle est la différence entre unref()
, quit()
et end()
.
end()
semble fermer une connexion sans attendre que toutes les sockets soient fermées.
unref()
semble attendre la fin de toutes les commandes.
quit()
semble être similaire à unref()
.
unref()
n'a pas de délai d'expiration, est-il garanti qu'il se termine ou dois-je définir un délai d'expiration?end
appelé sans condition depuis lequel j'ai appelé?end()
est conçu pour être utilisé lorsque vous terminez l'application MAINTENANT, par exemple un gestionnaire uncaughtException
, et n'anticipez pas ou ne voulez pas attendre (le cas échéant) les réponses des commandes que vous avez envoyées qui ne sont pas encore revenus de Redis.
quit()
est conçu pour lorsque vous avez terminé avec cette connexion et que vous souhaitez la fermer, mais laissez l'activité inachevée se terminer. Dans la plupart des cas, si vous essayez de mettre fin à la connexion, utilisez quit()
unref()
n'est pas conçu pour concurrencer ces options, mais simplement pour permettre à votre application de se fermer si la seule chose asynchrone restante est le client Redis. C'est généralement le cas pour une sorte de script où vous effectuez une requête par lots ou un test qui se connecte à Redis. Il se comporte de la même manière que le unref
ici http://nodejs.org/api/net.html#net_server_unref
Ensuite, l'événement end
n'est émis que lorsque vous appelez quit()
apparemment. Je ne sais pas exactement pourquoi sans recherche.
si vous n'appelez pas, ce qui se passe.
@techsin Si vous ne fermez jamais la connexion redis, votre application de nœud restera connectée au serveur Redis et attendra pour toujours.
que se passe-t-il si l'application s'est fermée, mais que le serveur Redis est toujours en marche. cela ferait-il référence au serveur Redis? Serait-ce une sorte de fuite de mémoire
désolé je n'ai pas été clair la première fois
Non, si l'application se ferme, elle mettra fin à la connexion client et le serveur Redis mettra fin à la référence de son côté, donc pas de fuite de mémoire.
Commentaire le plus utile
end()
est conçu pour être utilisé lorsque vous terminez l'application MAINTENANT, par exemple un gestionnaireuncaughtException
, et n'anticipez pas ou ne voulez pas attendre (le cas échéant) les réponses des commandes que vous avez envoyées qui ne sont pas encore revenus de Redis.quit()
est conçu pour lorsque vous avez terminé avec cette connexion et que vous souhaitez la fermer, mais laissez l'activité inachevée se terminer. Dans la plupart des cas, si vous essayez de mettre fin à la connexion, utilisezquit()
unref()
n'est pas conçu pour concurrencer ces options, mais simplement pour permettre à votre application de se fermer si la seule chose asynchrone restante est le client Redis. C'est généralement le cas pour une sorte de script où vous effectuez une requête par lots ou un test qui se connecte à Redis. Il se comporte de la même manière que leunref
ici http://nodejs.org/api/net.html#net_server_unref