|
Автор |
Съобщение |
Редовен
Регистриран на: 18/02/2010 1:50 pm
Support:
Bonus: 178
Мнения: 1750
|
25/04/2018 8:42 am
Laravel background jobs
|
|
|
Здравейте, възможно ли е да се стартира задача в бекграунд в Ларавел без да се стартира ръчно? Например юзър достъпва някаква страница, натиска бутон и задачата се стартира, да кажем ъпдейтва някакво поле в базата данни през определен период от време.
|
|
Върнете се в началото |
|
|
Активен
Регистриран на: 25/12/2012 12:03 pm
Support:
Bonus: 280
Мнения: 818
|
25/04/2018 8:47 am
|
|
|
Може да го направиш с https://laravel.com/docs/5.6/queuesВъпроса е че трябва да го настроиш през командния прозорец или ssh ако си на vps. На споделен хостинг не става или поне преди време аз като търсих нямаше начин.  |
|
Върнете се в началото |
|
|
Редовен
Регистриран на: 18/02/2010 1:50 pm
Support:
Bonus: 178
Мнения: 1750
|
25/04/2018 9:00 am
|
|
|
Четох за това но ако съм разбрал правилно трябва да подам команда в артисан за да стартирам задачата, а аз искам да се стартира без моята намеса.
|
|
Върнете се в началото |
|
|
Активен
Регистриран на: 25/12/2012 12:03 pm
Support:
Bonus: 280
Мнения: 818
|
25/04/2018 9:19 am
|
|
|
Да точно така. Затова аз ползвам друго. Използвам команди. Но не знам до колко ще ти свърши работа това ако ти трябва да се изпълни точно на клик на бутон от потребител, но все пак .. Те вървят навсякъде и могат да се разграфят както си поискаш. https://laravel.com/docs/5.6/scheduling Идеята е че работят с cron и трябва да нагласиш един единствен крон който да изпълнява : |
| * * * * * php /path-to-your-project/artisan schedule:run >> /dev/null 2>&1 | | |
И вече ти в кода си правиш командите и им казваш колко пъти на ден да се изпълняват или всяка минута или както си поискаш. Пример: PHP code: $schedule->command('foo') ->hourly(); като това се пише в App/Console/Kernel.php, а командите се създават с артисан команда и си ги търсиш в App/Console/Commands/(тук)  Другия вариант е просто ajax call и така  |
|
Върнете се в началото |
|
|
Редовен
Регистриран на: 18/02/2010 1:50 pm
Support:
Bonus: 178
Мнения: 1750
|
25/04/2018 9:48 am
|
|
|
Мисля че и schedule няма да ми свърши работа, защото пак трябва аз да го стартирам, а целта е да се стартира от юзърите.
А какво имаш предвид с ajax call?
|
|
Върнете се в началото |
|
|
Активен
Регистриран на: 25/12/2012 12:03 pm
Support:
Bonus: 280
Мнения: 818
|
|
Върнете се в началото |
|
|
Редовен
Регистриран на: 18/02/2010 1:50 pm
Support:
Bonus: 178
Мнения: 1750
|
25/04/2018 10:06 am
|
|
|
Да ще обясня подробно, но ще е след около един час, че сега ми се налага да изляза.
|
|
Върнете се в началото |
|
|
Потребител
Регистриран на: 24/03/2013 3:23 pm
Support:
Bonus: 110
Мнения: 726
|
25/04/2018 11:26 am
|
|
|
joTunkiq написа: | Може да го направиш с https://laravel.com/docs/5.6/queues
Въпроса е че трябва да го настроиш през командния прозорец или ssh ако си на vps. На споделен хостинг не става или поне преди време аз като търсих нямаше начин.  |
Не му трябва конзола въобще. Всичко може ръчно да си го направи. Създава си класа в папка app/Jobs, имплементира нужните зависимости(които са описани в сайта), настройва си какво иска да прави(като насторйки от рода на колко опита да направи, за да се изпълни могат да се опишат чрез публични свойства в класа) и воаля. След това го изпълнява с YouJobClass::dispatch().
@teroristd относно примера ти. Искаш като веднъж натисне бутона, задачата да си се стартира като цяло и през определен период да си ъпдейтва? Без да е нужно второ кликане? |
|
Върнете се в началото |
|
|
Редовен
Регистриран на: 18/02/2010 1:50 pm
Support:
Bonus: 178
Мнения: 1750
|
25/04/2018 2:28 pm
|
|
|
Revelation написа: | @teroristd относно примера ти. Искаш като веднъж натисне бутона, задачата да си се стартира като цяло и през определен период да си ъпдейтва? Без да е нужно второ кликане? |
Да.
Но нека обясня по детайлно. Искам да си направя игра, като я правя изцяло с учебна цел. Смятам че така ще ми е по интересно и ще науча различни неща . Ще я правя с Laravel и някакви други технологии ако са необходими, като Vue, Angular и т.н. Да минем на това което искам да направя в момента. Нека си представим че някакъв юзър се регистрира. В момента на регистрацията в базата се попълват освен обичайните неща и някаква таблица с ресурси, например жълтици, камъни и желязо. Да кажем в началото има 100 жълтици, 0 камъни и 0 желязо. Първоначалната опция е да построи мина за камъни, за която като се натисне бутон трябва да се стартира таймер, например за 10мин. и като изтече времето да се стартира задачата в бекграунд която да ъпдейтва базата през някакъв интервал например 1мин. и да добавя по 1 камък на играча. |
|
Върнете се в началото |
|
|
Активен
Регистриран на: 25/12/2012 12:03 pm
Support:
Bonus: 280
Мнения: 818
|
|
Върнете се в началото |
|
|
Редовен
Регистриран на: 18/02/2010 1:50 pm
Support:
Bonus: 178
Мнения: 1750
|
25/04/2018 2:59 pm
|
|
|
joTunkiq написа: | Така вече като знаем какво искаш по-лесно ще ти хелпнем. Не че искам да се поватарям, ноо ..
Цитат: | При цъкане на бутона js функция прави post заявка до някакъв route и кода ти се изпълнява. |
Цитат: | Или разбира се може и без ajax и просто при субмит в контролера да си изпълниш кода. |
По скоро тука проблема е, че не може да си го представиш как ще изглежда в базата данни ми се струва  |
Не ми е проблема базата, нито рутовете, за сега , ами това че ако играча излезне от играта кода ще спре да се изпълнява. Целта е мината да почне да си трупа ресурси дори играча да не е на линия. |
|
Върнете се в началото |
|
|
Активен
Регистриран на: 11/06/2012 8:07 pm
Support:
Bonus: 315
Мнения: 1482
|
25/04/2018 3:18 pm
|
|
|
Цитат: | Не ми е проблема базата, нито рутовете, за сега Very Happy, ами това че ако играча излезне от играта кода ще спре да се изпълнява. Целта е мината да почне да си трупа ресурси дори играча да не е на линия.
|
Можеш да ги смяташ стойностите, когато ти потрябват.
Примерно при следващото влизане умножаваш изминалото време по някакъв коефициент и ъпдейтваш. Няма нужда от кронове и такива работи.
(Щом не правиш игра, която 60 пъти в секунда ъпдейтва) |
|
Върнете се в началото |
|
|
|