Laravel Aufträge in der Warteschlange verarbeitet sofort auch mit einer Verzögerung

Ich bin derzeit an der Entwicklung meiner persönlichen app, die über private Server (zB. Minecraft-Server) und da das Abfragen der server einige Zeit dauert, habe ich beschlossen, Aufträge in der Warteschlange, aber Sie sind nicht ordnungsgemäß funktioniert, werden Sie sofort ausgeführt, wenn Sie aufgerufen werden, obwohl Sie sich verzögert, was zu einer massiven Latenz-Seite anfordern.

Hier mein HomeController index (), die fordert, den job zu jedem update-server mit einer 30-Sekunden-Verzögerung:

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 updates auf den Servern 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
       }
   }
}

Wenn der HomeController ist index() ist ran, es ist eine massive Verzögerung bei der Anforderung der Seite, ich folgte das tutorial auf Laravel Offiziellen Webseite, versucht, Antworten zu finden und nichts.

So, was mache ich falsch? Warum ist nicht der job, verzögert 30 Sekunden und dann tun Sie das im hintergrund in meinem server? Vielen Dank im Voraus.

Auch: Der Griff() tut, was es soll, es fragt den server, sendet die Pakete und updates meine Datenbank mit der richtigen info.

  • Ich hatte Probleme mit dispatch(). Wenn ich wechselte zu \Queue::later(delay,job) Dinge zu arbeiten begonnen.
InformationsquelleAutor Micael Sousa | 2015-06-27
Schreibe einen Kommentar