Я хочу осуществить какой-то системы очередей сообщений в нашем WebProject. Мне просто интересно, что это лучший способ сделать это. Он написан на PHP (Yii Framework) с MySQL в качестве системы баз данных.Лучший способ реализации очереди сообщений
Идея:
- Пользователь 1 отправляет сообщение пользователю 2, но сообщение будет помещен в будущем (т.е. 02-11-2013 14:31)
- Пользователь 2 получает сообщение от пользователя 1 в его/ее почтовом ящике 02-11-2013 14:31 И получает уведомление об этом новом сообщении.
Я думал о 2 способа сделать это:
Вставьте сообщение от пользователя 1 в «сообщение» таблицы с указанием даты и времени сообщение должно быть доставлено к пользователю 2. Пользователь 2 может читать его только тогда, когда эта дата и время меньше текущей даты и времени (
WHERE addTime <= NOW()
).Вставьте сообщение от пользователя 1 в таблице «MessageQueue». Это таблица, содержащая все сообщения, которые необходимо разместить в будущем. Cronjob (который будет запускаться каждую минуту или около того) поместит все сообщения с датой и временем, меньшим, чем текущее время, в таблицу «сообщение» и удалит его из таблицы «messageQueue». Электронная почта может быть отправлены непосредственно пользователем 2.
Минусы:
- Метод 1: нет возможности отправить уведомление по электронной почте пользователя 2
- Способ 2: Вы должны установите cronjob, который запускается каждую минуту (сообщение может быть размещено в будущем с точностью до одной минуты). Электронная почта уведомления может быть отправлена напрямую, но это будет тяжелая система с большим количеством сообщений. Если cronjob занимает больше минуты, он будет перекрываться друг с другом, что может привести к завершению работы сервера в конечном итоге.
Кто-нибудь есть идея сделать это? Я действительно ищу какую-то функцию push из сервера/базы данных, которая сообщает моему сценарию, что новое сообщение доставляется пользователю 2 и что электронное письмо необходимо отправить пользователю 2.
Вы имеете в виду сценарий называет себя после того, как она была закончена? Тогда вы создаете какой-то бесконечный цикл. Это идея, но похоже, что многое может пойти не так. Что делать, если скрипт запускается дважды или сценарий оканчивается перезагрузкой сервера .. – davey
Я просто дал вам идею :) Тем не менее регулярная CRON работы будет лучшим решением здесь, я думаю. – Piotr
Я знаю;).Мы использовали его раньше, но необходимо, чтобы сообщения были доставлялись с минимальной точностью. Вы можете сделать это, разрешив cronjob работать каждую минуту, с возможным перекрытием в результате. – davey