Laravel background jobs

C++ JAVA
User avatar
teroristd
Много Редовен
Много Редовен
Posts: 1769
Joined: Thu Feb 18, 2010 11:50 am
Answers: 83

Post by teroristd » Wed Apr 25, 2018 12:59 pm

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

User avatar
anonimen
Web-tourist
Web-tourist
Posts: 1573
Joined: Mon Jun 11, 2012 6:07 pm
Answers: 163
Location: Parse error: unexpected "}" in /home/index.php on line 26

Post by anonimen » Wed Apr 25, 2018 1:18 pm

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

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

(Щом не правиш игра, която 60 пъти в секунда ъпдейтва)

User avatar
teroristd
Много Редовен
Много Редовен
Posts: 1769
Joined: Thu Feb 18, 2010 11:50 am
Answers: 83

Post by teroristd » Wed Apr 25, 2018 1:26 pm

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

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

(Щом не правиш игра, която 60 пъти в секунда ъпдейтва)
Да виж това е идейно. Не се бях сетил за този начин, обаче тук изниква един проблем. Какво правим ако играча не излезне и не рефрешне през времето което ще е необходимо да се натрупа един камък?

joTunkiq
Потребител
Потребител
Posts: 826
Joined: Tue Dec 25, 2012 10:03 am
Answers: 142
Contact:

Post by joTunkiq » Wed Apr 25, 2018 2:01 pm

Kолегата това ти каза, като сметнеш всичко, ще ъпдейтнеш тогава когато е изминало времето.

Примерно ако трябва да приключи копаенето в 23:59 днес - тогава ще му добавиш всичките изкопани ресурси.

Или процентно спрямо времето на започване и приключване може да му добавяш някакви стойности (там колкото % е разликата), но тука трудно би станало без ajax :)

User avatar
Revelation
Web-tourist
Web-tourist
Posts: 867
Joined: Sun Mar 24, 2013 1:23 pm
Answers: 62

Post by Revelation » Wed Apr 25, 2018 2:56 pm

Объркана ти е логиката.

Нещата не се стартират след като кликнеш някъде.
В такава ситуация си правиш една таблица, където регистрираш всеки потребител, който трябва да участва в "работата"(queue job). Това queue работата му е да взима данните от базата данни и да ъпдейтва ресурсите на записаните потребители.

От там си правиш Schedule примерно на всеки 5 минути да изпълнява този queue job и който се стартира от самото пускане на играта.

Самата таблица трябва да съдържа например:

resources_per_min - измисли си име
[sql]
user_id
gold
stone
iron
[/sql]

Това трябва да съдържа по колко ресурси на 5 минути трябва да се увеличават. Отделно си имай таблица resources да речем, която де факто ще се обновява.

Тази таблица(resources_per_min) трябва да се ъпдейтва от друго queue, което се стартира при кликане бутона за построяване на сграда и му се слага delay, който е времето за построяване на сграда + подаваш user_id да знаеш на кой потребител трябва да обновиш данните.

И след като искаш да учиш Laravel, към всичко това можеш да използваш Broadcasting, за да направиш нещата малко real-time.

Надявам се, че съм го описал добре. Ако не, ще се опитам да ти направя някоя графика.

User avatar
teroristd
Много Редовен
Много Редовен
Posts: 1769
Joined: Thu Feb 18, 2010 11:50 am
Answers: 83

Post by teroristd » Wed Apr 25, 2018 4:03 pm

Благодаря Revelation. Ако не те притеснява ще се радвам да направиш някоя графика :) . Също така няма да се разсърдя и на малко код.

User avatar
Revelation
Web-tourist
Web-tourist
Posts: 867
Joined: Sun Mar 24, 2013 1:23 pm
Answers: 62

Post by Revelation » Wed Apr 25, 2018 5:34 pm

https://drive.google.com/open?id=1W1OEo ... rmUDuxdojA

Не ми е сила да правя диаграми. Надявам се да е по-ясно какво се случва.

А код не мога да ти предоставя, защото сега нямам достатъчно време да правя имплементации.

User avatar
teroristd
Много Редовен
Много Редовен
Posts: 1769
Joined: Thu Feb 18, 2010 11:50 am
Answers: 83

Post by teroristd » Thu Apr 26, 2018 9:11 am

Имам един малък проблем. Когато стартирам php artisan schedule:run се изпълнява само един път, а съм казал да е на всяка минута.

[php]
protected function schedule(Schedule $schedule)
{
$schedule->command('update:resources')->everyMinute();
}
[/php]

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

joTunkiq
Потребител
Потребител
Posts: 826
Joined: Tue Dec 25, 2012 10:03 am
Answers: 142
Contact:

Post by joTunkiq » Thu Apr 26, 2018 9:23 am

Ами да защото изпълняваш командата само 1 път :D

Затова ти бях споменал че трябва да създадеш крон задача, която да изпълнява тази команда и вече от кода ще си контролираш точно коя задача колко пъти да се изпълнява.
Идеята е че работят с cron и трябва да нагласиш един единствен крон който да изпълнява :

Code: Select all

* * * * * php /path-to-your-project/artisan schedule:run >> /dev/null 2>&1	
И вече ти в кода си правиш командите и им казваш колко пъти на ден да се изпълняват или всяка минута или както си поискаш. Smile Question
:?:

User avatar
teroristd
Много Редовен
Много Редовен
Posts: 1769
Joined: Thu Feb 18, 2010 11:50 am
Answers: 83

Post by teroristd » Thu Apr 26, 2018 9:30 am

Добре какъв път трябва да му подам? Реалният път ми е C:\xampp\htdocs\Game

Post Reply