Как видно из названия, даже после прочтения документации мне неясно, в чем разница между 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
Тогда событие end
генерируется только тогда, когда вы явно вызываете quit()
. Не уверен, почему, без исследования.
если вы не позвоните, уходите, что произойдет.
@techsin Если вы никогда не закроете соединение Redis, ваше приложение узла будет постоянно ждать подключения к серверу Redis.
что делать, если приложение закрылось, но сервер Redis все еще работает. это заставит сервер Redis хранить ссылку? это была бы утечка памяти
извините, я не понял в первый раз
Нет, если приложение закрывается, оно разрывает клиентское соединение, а сервер Redis прекращает обращение на своей стороне, поэтому утечки памяти нет.
Самый полезный комментарий
end()
предназначен для использования там, где вы завершаете приложение СЕЙЧАС, например, обработчикuncaughtException
, и не ожидаете или не хотите ждать (если есть) ответов от команд, которые вы могли отправить которые еще не вернулись из Redis.quit()
предназначен для случаев, когда вы закончили с этим соединением и хотите закрыть его, но дайте возможность завершить незавершенное действие. В большинстве случаев, если вы пытаетесь завершить соединение, используйтеquit()
unref()
не предназначен для конкуренции с этими параметрами, а просто для того, чтобы позволить вашему приложению завершиться, если единственной оставшейся асинхронной вещью является клиент Redis. Обычно это происходит с каким-то скриптом, в котором вы выполняете пакетный запрос, или с тестом, который подключается к Redis. Он ведет себя идентичноunref
здесь http://nodejs.org/api/net.html#net_server_unref