我目前正在開發我個人的應用程序,是關於私人服務器(例如,我的世界服務器),並自查詢服務器需要花費一些時間,我決定實現排隊的作業立即處理的作業,但是,他們工作不正常,即使被延遲時也會立即運行,導致頁面請求出現嚴重延遲。Laravel排隊甚至延遲
這裏是我的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秒,然後在我的服務器中在後臺執行此操作?先謝謝你。
另外:手柄()是做什麼是應該,它查詢服務器,發送數據包,並用正確的信息更新我的數據庫。
我必須使用'調度問題()'。當我切換到'\ Queue :: later(delay,job)'事情開始工作。 – QuickDanger