Node-redis: Разница между unref (), quit () и end ()

Созданный на 11 февр. 2015  ·  6Комментарии  ·  Источник: NodeRedis/node-redis

Как видно из названия, даже после прочтения документации мне неясно, в чем разница между unref() , quit() и end() .

  • Какой из них использовать и в каком случае?

end() похоже, закрывает соединение, не дожидаясь закрытия всех сокетов.
unref() кажется, ожидает завершения всех команд.
quit() похоже на unref() .

  • Поскольку unref() не имеет тайм-аута, гарантированно ли он закончится или мне следует установить тайм-аут?
  • Вызывается ли событие end безоговорочно, с которого я звонил?
question

Самый полезный комментарий

end() предназначен для использования там, где вы завершаете приложение СЕЙЧАС, например, обработчик uncaughtException , и не ожидаете или не хотите ждать (если есть) ответов от команд, которые вы могли отправить которые еще не вернулись из Redis.

quit() предназначен для случаев, когда вы закончили с этим соединением и хотите закрыть его, но дайте возможность завершить незавершенное действие. В большинстве случаев, если вы пытаетесь завершить соединение, используйте quit()

unref() не предназначен для конкуренции с этими параметрами, а просто для того, чтобы позволить вашему приложению завершиться, если единственной оставшейся асинхронной вещью является клиент Redis. Обычно это происходит с каким-то скриптом, в котором вы выполняете пакетный запрос, или с тестом, который подключается к Redis. Он ведет себя идентично unref здесь http://nodejs.org/api/net.html#net_server_unref

Все 6 Комментарий

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 прекращает обращение на своей стороне, поэтому утечки памяти нет.

Была ли эта страница полезной?
0 / 5 - 0 рейтинги