我目前正在开发我个人的应用程序,是关于私人服务器(例如,我的世界服务器),并自查询服务器需要花费一些时间,我决定实现排队的作业立即处理的作业,但是,他们工作不正常,即使被延迟时也会立即运行,导致页面请求出现严重延迟。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