Функция сна использует ресурсы сервера?

У меня есть две причины использовать функцию сна: во-первых, чтобы автоматически отправить электронное письмо с подтверждением клиенту спустя 20 минут после того, как они связываются с нами. Я не хочу использовать задания крона, потому что я хочу, чтобы это было точно 20 минутами (и я сыт по горло своим веб-сервером, отправляющим мне электронные письма, говоря мне, они инициировали задание крона..... новое электронное письмо каждые 20 минут!)

Вторая причина: я услышал о людях, отсылающих массовые электронные письма с помощью функции сна. Так как мой сервер только позволит 100 электронных писем в час, я хочу использовать функцию сна, чтобы иметь сон сценария в течение часа, тогда продолжаются, где это взяло.

Мой вопрос - это: это использует ресурсы сервера? Это замедлит вещи? Есть ли какие-либо другие проблемы с использованием функции сна? Заранее спасибо!

12
задан Dustin 4 March 2010 в 04:45
поделиться

2 ответа

Пока процесс находится в спящем режиме , он не будет потреблять процессорное время, но рабочий набор процесса по-прежнему требует физической памяти и / или файла подкачки для поддержки этого процесса. Другими словами, процесс интерпретатора PHP должен продолжать работать. Однако, если на вашем сервере достаточно оперативной памяти, это не должно быть проблемой.

14
ответ дан 2 December 2019 в 19:31
поделиться

Время доставки электронной почты может варьироваться, поэтому вы не получите письмо на чей-то почтовый ящик ровно за 20 минут, что бы вы ни делали.

Я использую долго работающий фоновый скрипт, запускаемый из интерфейса командной строки, а не из apache, для обработки отправки электронной почты. Мое приложение выгружает электронные письма в таблицу очереди, которую сценарий почтовой программы опрашивает каждые 15 секунд. Это sleep () s между опросами. Таким образом, у меня есть только один сценарий, который пытается подключиться к SMTP-серверу и спит.

Эта часть приложения успешно работала без серьезных проблем в течение последних 2 лет. Единственное раздражение заключается в том, что скрипт продолжает работать - если он по какой-либо причине выходит из строя, почта не уходит, пока вы не вернете его. Но в худшем случае вы можете просто периодически перезапускать его через cron, например ежедневно.

Если бы я занимался вашей проблемой, я бы просто поместил столбец «Время отправки» в таблицу очереди и назначил дату на 20 минут для этих писем. Затем почтовая программа SELECT * FROM mail_queue WHERE send_time <= NOW ()

В качестве альтернативы вы можете использовать настоящую очередь заданий, например beanstalkd. Я выбрал таблицу очереди исключительно для упрощения стека приложений.

8
ответ дан 2 December 2019 в 19:31
поделиться
Другие вопросы по тегам:

Похожие вопросы: