Ich bin gerade dabei, meine persönliche App, die über private Server (zB Minecraft Server) ist zu entwickeln und seit Abfrage des Servers dauert einige Zeit, entschied ich, in der Warteschlange eingereiht Jobs, aber sie funktionieren nicht richtig, sie werden sofort ausgeführt, wenn sie aufgerufen werden, obwohl sie verzögert sind, was zu einer massiven Latenz bei der Seitenanforderung führt.Laravel Jobs in der Warteschlange verarbeitet sofort auch mit einer Verzögerung
Hier Index mein Homecontroller ist(), die den Job jeden Server mit einer Verzögerung von 30 Sekunden zu aktualisieren, ruft:
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'));
}
Die Job-Klasse, die die Server-Updates ist die folgende:
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
}
}
}
Wann immer der Index des HomeControllers() wird ausgeführt, es kommt zu einer massiven Verzögerung der Seitenanforderung, ich habe das Tutorial auf der offiziellen Webseite von Laravel verfolgt und versucht, Antworten und nichts zu finden.
Also, was mache ich falsch? Warum wird der Job nicht um 30 Sekunden verzögert und dann im Hintergrund auf meinem Server ausgeführt? Vielen Dank im Voraus.
Auch: Der handle() macht was er soll, fragt den Server ab, sendet Pakete und aktualisiert meine Datenbank mit den richtigen Informationen.
Ich hatte Probleme verwendet mit 'dispatch()'. Als ich zu '\ Queue :: spter wechselte (Verspätung, Job), begannen die Dinge zu arbeiten. – QuickDanger