2016-02-21 6 views
1

Я создаю лотерею в качестве небольшого побочного проекта. Он будет обрабатывать несколько лотерей каждый со временем окончания. В конце каждой лотереи выбирается единственный победитель.Проект Laravel Raffle. Является ли Queue лучшим способом для достижения этой цели?

Являются ли Laravel Jobs лучшим способом для этого? Разве я просто создаю одиночное вечно повторяющееся задание, чтобы проверить, закончились ли какие-либо лотереи, и нужен ли победитель?

Если нет, то какой будет лучший способ?

+1

Я голосовал, если только для выключателя языка. «Laravel Raffle» ... что бы это ни было, у него будет отличное название программы :) –

ответ

1

Я не думаю, что навсегда повторяющиеся сценарии, как правило, являются хорошей идеей.

Я просто создать один вечно повторяющуюся работу

Это почти никогда не является хорошей идеей. Он имеет свои приложения в устаревших кодах, но для этой работы лучше всего использовать веб-узлы и события. Кроме того, у вас есть преимущество использования очень хорошую основу, как Laravel, поэтому воспользоваться ею

WebSockets
Если вы хотите, чтобы люди были уведомлены в режиме реального времени в браузере.

Если у вас есть все ваши пользователи, подписаться на канал веб-канала при загрузке страницы, вы можете легко отправить сообщение на сервер веб-сервера всем подписчикам (например, браузерам), чтобы сообщить им, кто победитель.

Затем, в вашем клиентском коде (Javascript), вы можете проанализировать это сообщение, чтобы определить, кто победитель, и отобразить всплывающее окно, которое позволит пользователю узнать.

События
Если вы не возражаете, немного задержки, наиболее определенно использовать события для этого.

В конце каждого действия, которое потенциально может привести к лотерее (например, имя выбрано наугад компьютером - function chooseName()). Огоньте событие, которое уведомляет всех участников розыгрыша. https://laravel.com/docs/5.2/events

NB: Я перечислил вышеупомянутые два как отдельные проблемы, но на самом деле их можно использовать вместе. Например, в случае , которое выбрано имя случайным образом, определить, является ли лотерейный закончена, и уведомить клиентов с помощью WebSocket соединению.

Почему бы не использовать задерживается Работа
Суть причины - ремонтопригодность

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

Теперь ваша работа имеет установленную задержку на месте - действительно ли это хороший принцип программирования, чтобы изменить две вещи, когда изменился только один сценарий? Неа.Имея что-то вроде события на месте - onRaffleEnd - явно ищет событие. Ларавелу все равно, когда произойдет это событие.

Использование отложенных заданий может работать - это просто не очень хороший вариант использования в вашем сценарии и ограничивает то, что вы можете сделать в долгосрочной перспективе. Это заставит вас делать больше соображений, когда возникают непредвиденные обстоятельства, а также когда вы хотите изменить ситуацию. Это также децентрализует логику, связанную с вашей лотереей. Хотя развязывающий код - это хорошая практика, логика сидит в совершенно разных местах, делает обслуживание кошмаром.

+0

Очень интересно. Я даже не думал о веб-сайтах, чтобы предупредить пользователя. Это было бы очень круто. Что касается событий. Я немного волнуюсь, потому что сайт будет довольно маленьким, чтобы начать с того, что события могут не срабатывать какое-то время. Есть ли проблемы с производительностью при создании задания для каждого лотереи, созданного с помощью объявления «Очередь :: позже», дающего конечное время в качестве задержки? – THEK

+0

@THeK - Я не уверен, что события не будут запускаться какое-то время, оправдывает не использование событий. Тем не менее, вы делаете интересный момент вокруг отложенной работы. Я уточню свой ответ, чтобы объяснить, почему я не думаю, что это хорошая идея. –

 Смежные вопросы

  • Нет связанных вопросов^_^