タイトルが示すように、ドキュメントを読んだ後でも、 unref()
、 quit()
、およびend()
の違いが何であるかはわかりません。
end()
は、すべてのソケットが閉じられるのを待たずに接続を閉じているようです。
unref()
は、すべてのコマンドが終了するのを待っているようです。
quit()
はunref()
似ているようです。
unref()
はタイムアウトがないので、終了することが保証されていますか、それともタイムアウトを設定する必要がありますか?end
イベントは無条件に呼び出されますか?end()
は、 uncaughtException
ハンドラーなど、今すぐアプリケーションを終了する場合に使用するように設計されており、送信したコマンドからの応答を予期したり、(もしあれば)待ちたくない場合に使用します。まだRedisから戻ってこない。
quit()
は、この接続が完了し、接続を閉じたいが、未完了のアクティビティを完了できるようにするために設計されています。 ほとんどの場合、接続を終了しようとしている場合は、 quit()
使用します
unref()
は、これらのオプションと競合するようには設計されてだけである場合にアプリケーションを終了できるようにするunref
と同じように動作しますhttp://nodejs.org/api/net.html#net_server_unref
次に、 end
イベントquit()
明らかに
quitと呼ばないと、何が起こるかわかりません。
@techsin redis接続を閉じない場合、ノードアプリケーションはRedisサーバーに接続されたまま待機します。
アプリケーションが終了したが、redisサーバーがまだ稼働している場合はどうなりますか。 それはredisサーバーに参照を保持させますか? それは一種のメモリリークでしょうか
すみません、最初ははっきりしませんでした
いいえ、アプリケーションが閉じると、クライアント接続が終了し、Redisサーバーがその側で参照を終了するため、メモリリークは発生しません。
最も参考になるコメント
end()
は、uncaughtException
ハンドラーなど、今すぐアプリケーションを終了する場合に使用するように設計されており、送信したコマンドからの応答を予期したり、(もしあれば)待ちたくない場合に使用します。まだRedisから戻ってこない。quit()
は、この接続が完了し、接続を閉じたいが、未完了のアクティビティを完了できるようにするために設計されています。 ほとんどの場合、接続を終了しようとしている場合は、quit()
使用しますunref()
は、これらのオプションと競合するようには設計されてだけである場合にアプリケーションを終了できるようにするunref
と同じように動作しますhttp://nodejs.org/api/net.html#net_server_unref