В настоящее время я разрабатываю свое личное приложение, посвященное частным серверам (например, Minecraft Servers), и поскольку запрос на сервер занимает некоторое время, я решил реализовать задания в очереди, однако они не работают должным образом, они запускаются немедленно, когда даже несмотря на то, что они задерживаются, вызывая массовую задержку в запросе страницы.
Здесь мой индекс HomeController(), который вызывает задание для обновления каждого сервера с задержкой в 30 секунд:
public function index()
{
$servers = Server::all();
foreach($servers as $server)
{
//Job Dispatch
$job = (new UpdateServer($server->id))->delay(30);
$this->dispatch($job);
}
return view('serverlist.index', compact('servers'));
}
Класс задания, который обновляет серверы, следующий:
class UpdateServer extends Job implements SelfHandling, ShouldQueue
{
use InteractsWithQueue, SerializesModels;
protected $id;
public function __construct($id)
{
$this->id = $id;
}
public function handle(){
$server = Server::findOrFail($this->id);
//preparing the packet
$test = new RAGBuffer();
$test->addChar('255');
$test->addChar('1');
$test->addShort(1 | 8);
//finding the server
$serverGame = new RAGServer($server->server_ip);
//Get server info
$status = $serverGame->sendPacket($test);
$server->onlinePlayers = $status->getOnline();
$server->peakPlayers = $status->getPeak();
$server->maxPlayers = $status->getMax();
if (!$server->save()) {
//error ocurred
}
}
}
Всякий раз, когда запускается индекс HomeController index(), наблюдается серьезная задержка в запросе страницы, я следил за учебником на официальной веб-странице Laravel, пытался найти ответы и ничего.
Итак, что я делаю неправильно? Почему работа не задерживается на 30 секунд, а затем делает это в фоновом режиме на моем сервере? Заранее благодарю вас.
Также: дескриптор() выполняет то, что он должен, он запрашивает сервер, отправляет пакеты и обновляет мою базу данных с правильной информацией.