- Laravel background jobs
12345678910
WT форуми -> PHP MySQL ASP.NET -> Laravel background jobs
Създайте нова тема Напишете отговор 
Автор Съобщение
teroristd
Редовен
Редовен

Регистриран на: 18/02/2010 1:50 pm

Support: 81
Bonus: 174
Мнения: 1703
Мнение 25/04/2018 8:42 am     Laravel background jobs Отговорете с цитат


Здравейте, възможно ли е да се стартира задача в бекграунд в Ларавел без да се стартира ръчно? Например юзър достъпва някаква страница, натиска бутон и задачата се стартира, да кажем ъпдейтва някакво поле в базата данни през определен период от време.
Върнете се в началото
Вижте профила на потребителя Изпратете лично съобщение
joTunkiq
Активен
Активен

Регистриран на: 25/12/2012 12:03 pm

Support: 130
Bonus: 260
Мнения: 793
Мнение 25/04/2018 8:47 am      Отговорете с цитат


Може да го направиш с https://laravel.com/docs/5.6/queues

Въпроса е че трябва да го настроиш през командния прозорец или ssh ако си на vps. На споделен хостинг не става или поне преди време аз като търсих нямаше начин. Question
Върнете се в началото
Вижте профила на потребителя Изпратете лично съобщение Посетете сайта на потребителя
teroristd
Редовен
Редовен

Регистриран на: 18/02/2010 1:50 pm

Support: 81
Bonus: 174
Мнения: 1703
Мнение 25/04/2018 9:00 am      Отговорете с цитат


Четох за това но ако съм разбрал правилно трябва да подам команда в артисан за да стартирам задачата, а аз искам да се стартира без моята намеса.
Върнете се в началото
Вижте профила на потребителя Изпратете лично съобщение
joTunkiq
Активен
Активен

Регистриран на: 25/12/2012 12:03 pm

Support: 130
Bonus: 260
Мнения: 793
Мнение 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


И вече ти в кода си правиш командите и им казваш колко пъти на ден да се изпълняват или всяка минута или както си поискаш. Smile Question

Пример:
PHP code:
$schedule->command('foo')
->hourly();



като това се пише в App/Console/Kernel.php, а командите се създават с артисан команда и си ги търсиш в App/Console/Commands/(тук) Idea Question

Другия вариант е просто ajax call и така Smile
Върнете се в началото
Вижте профила на потребителя Изпратете лично съобщение Посетете сайта на потребителя
teroristd
Редовен
Редовен

Регистриран на: 18/02/2010 1:50 pm

Support: 81
Bonus: 174
Мнения: 1703
Мнение 25/04/2018 9:48 am      Отговорете с цитат


Мисля че и schedule няма да ми свърши работа, защото пак трябва аз да го стартирам, а целта е да се стартира от юзърите.

А какво имаш предвид с ajax call?
Върнете се в началото
Вижте профила на потребителя Изпратете лично съобщение
joTunkiq
Активен
Активен

Регистриран на: 25/12/2012 12:03 pm

Support: 130
Bonus: 260
Мнения: 793
Мнение 25/04/2018 9:56 am      Отговорете с цитат


ами както би го напрвил попринцип ако не беше във фреймуорк. При цъкане на бутона js функция прави post заявка до някакъв route и кода ти се изпълнява.

Или разбира се може и без ajax и просто при субмит в контролера да си изпълниш кода. Може би ако кажеш какво точно искаш ще е по-лесно иначе варианти колкото иска - както виждаш. Exclamation Question
Върнете се в началото
Вижте профила на потребителя Изпратете лично съобщение Посетете сайта на потребителя
teroristd
Редовен
Редовен

Регистриран на: 18/02/2010 1:50 pm

Support: 81
Bonus: 174
Мнения: 1703
Мнение 25/04/2018 10:06 am      Отговорете с цитат


Да ще обясня подробно, но ще е след около един час, че сега ми се налага да изляза.
Върнете се в началото
Вижте профила на потребителя Изпратете лично съобщение
Revelation
Потребител
Потребител

Регистриран на: 24/03/2013 3:23 pm

Support: 54
Bonus: 108
Мнения: 693
Мнение 25/04/2018 11:26 am      Отговорете с цитат


joTunkiq написа:
Може да го направиш с https://laravel.com/docs/5.6/queues

Въпроса е че трябва да го настроиш през командния прозорец или ssh ако си на vps. На споделен хостинг не става или поне преди време аз като търсих нямаше начин. Question


Не му трябва конзола въобще. Всичко може ръчно да си го направи.
Създава си класа в папка app/Jobs, имплементира нужните зависимости(които са описани в сайта), настройва си какво иска да прави(като насторйки от рода на колко опита да направи, за да се изпълни могат да се опишат чрез публични свойства в класа) и воаля. След това го изпълнява с YouJobClass::dispatch().

@teroristd относно примера ти. Искаш като веднъж натисне бутона, задачата да си се стартира като цяло и през определен период да си ъпдейтва? Без да е нужно второ кликане?
Върнете се в началото
Вижте профила на потребителя Изпратете лично съобщение
teroristd
Редовен
Редовен

Регистриран на: 18/02/2010 1:50 pm

Support: 81
Bonus: 174
Мнения: 1703
Мнение 25/04/2018 2:28 pm      Отговорете с цитат


Revelation написа:
@teroristd относно примера ти. Искаш като веднъж натисне бутона, задачата да си се стартира като цяло и през определен период да си ъпдейтва? Без да е нужно второ кликане?


Да.

Но нека обясня по детайлно. Искам да си направя игра, като я правя изцяло с учебна цел. Смятам че така ще ми е по интересно и ще науча различни неща Smile . Ще я правя с Laravel и някакви други технологии ако са необходими, като Vue, Angular и т.н. Да минем на това което искам да направя в момента. Нека си представим че някакъв юзър се регистрира. В момента на регистрацията в базата се попълват освен обичайните неща и някаква таблица с ресурси, например жълтици, камъни и желязо. Да кажем в началото има 100 жълтици, 0 камъни и 0 желязо. Първоначалната опция е да построи мина за камъни, за която като се натисне бутон трябва да се стартира таймер, например за 10мин. и като изтече времето да се стартира задачата в бекграунд която да ъпдейтва базата през някакъв интервал например 1мин. и да добавя по 1 камък на играча.
Върнете се в началото
Вижте профила на потребителя Изпратете лично съобщение
joTunkiq
Активен
Активен

Регистриран на: 25/12/2012 12:03 pm

Support: 130
Bonus: 260
Мнения: 793
Мнение 25/04/2018 2:39 pm      Отговорете с цитат


Така вече като знаем какво искаш по-лесно ще ти хелпнем. Не че искам да се поватарям, ноо ..
Цитат:
При цъкане на бутона js функция прави post заявка до някакъв route и кода ти се изпълнява.

Цитат:
Или разбира се може и без ajax и просто при субмит в контролера да си изпълниш кода.


По скоро тука проблема е, че не може да си го представиш как ще изглежда в базата данни ми се струва Very Happy
Върнете се в началото
Вижте профила на потребителя Изпратете лично съобщение Посетете сайта на потребителя
teroristd
Редовен
Редовен

Регистриран на: 18/02/2010 1:50 pm

Support: 81
Bonus: 174
Мнения: 1703
Мнение 25/04/2018 2:59 pm      Отговорете с цитат


joTunkiq написа:
Така вече като знаем какво искаш по-лесно ще ти хелпнем. Не че искам да се поватарям, ноо ..
Цитат:
При цъкане на бутона js функция прави post заявка до някакъв route и кода ти се изпълнява.

Цитат:
Или разбира се може и без ajax и просто при субмит в контролера да си изпълниш кода.


По скоро тука проблема е, че не може да си го представиш как ще изглежда в базата данни ми се струва Very Happy


Не ми е проблема базата, нито рутовете, за сега Very Happy, ами това че ако играча излезне от играта кода ще спре да се изпълнява. Целта е мината да почне да си трупа ресурси дори играча да не е на линия.
Върнете се в началото
Вижте профила на потребителя Изпратете лично съобщение
anonimen
Активен
Активен

Регистриран на: 11/06/2012 8:07 pm

Support: 154
Bonus: 307
Мнения: 1419
Мнение 25/04/2018 3:18 pm      Отговорете с цитат


Цитат:
Не ми е проблема базата, нито рутовете, за сега Very Happy, ами това че ако играча излезне от играта кода ще спре да се изпълнява. Целта е мината да почне да си трупа ресурси дори играча да не е на линия.


Можеш да ги смяташ стойностите, когато ти потрябват.

Примерно при следващото влизане умножаваш изминалото време по някакъв коефициент и ъпдейтваш. Няма нужда от кронове и такива работи.

(Щом не правиш игра, която 60 пъти в секунда ъпдейтва)
Върнете се в началото
Вижте профила на потребителя Изпратете лично съобщение
Покажи мнения от преди:    
Създайте нова тема   Напишете отговор    web-tourist.net Форуми -> PHP MySQL ASP.NET Часовете са според зоната GMT + 2 Часа
12345678910
Страница 1 от 10


 
Идете на:  
Не Можете да пускате нови теми
Не Можете да отговаряте на темите
Не Можете да променяте съобщенията си
Не Можете да изтривате съобщенията си
Не Можете да гласувате в анкети