我目前正在开发关于私人服务器(例如Minecraft服务器)的个人应用程序,并且由于查询服务器需要一些时间,我决定实施排队作业,但是,它们工作不正常,即使在调用时也会立即运行它们被延迟,导致页面请求的大量延迟.
这是我的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'));
}
Run Code Online (Sandbox Code Playgroud)
更新服务器的作业类如下:
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 = …Run Code Online (Sandbox Code Playgroud) 我目前正在使用我的Laravel应用程序并防止垃圾邮件我决定只有活跃用户才能登录.我正在使用Laravel的登录系统,就像在Laravel的官方网站教程中一样,这是我的表单操作:
<form class="form-horizontal" role="form" method="POST" action="{{ url('/auth/login') }}">
Run Code Online (Sandbox Code Playgroud)
这完全正常,但我想检查用户的活动,如果不活动,它将被重定向到激活页面,否则它将登录.有没有一种简单的方法可以做到这一点,还是我有义务制作新的控制器,路线和更多的验证?谢谢.
编辑:忘记提及我的数据库中有一个"活动"列.
我几天前已经实现了一个工作队列,我遇到了重复问题,我目前正在使用Redis并遵循Laravel的官方教程.
在我的情况下,每当有人进入主页,作业被发送到队列,让我们举个例子:
HomeController的 index():
public function index()
{
if(/*condition*/){
//UpdateServer being the job
$this->dispatch(new UpdateServer());
}
}
Run Code Online (Sandbox Code Playgroud)
由于此任务大约需要10秒钟才能完成,如果在处理任务时对我的主页有n个请求,则队列中将会有更多相同的作业,从而导致我的数据库出现意外结果.
所以我的问题是,有没有办法知道某个工作是否已经在队列中?
我即将解决这个问题,我正在我的应用程序中实现IPN系统,现在开始使用Paypal的IPN模拟器进行测试.
当我尝试发送IPN模拟时,它只是给出以下错误:
很遗憾,但是有一个HTTP错误.请再试一次.
首先想到的是 - 贝宝的服务已经关闭 - 测试错误,因为如果我创建一个空白页面并向其发送IPN消息http://myDNS.com/blankpage.php就可以发送它.
第二个想法 - 路线问题 - 我认为这也不是问题:
这是我的IPN听众PurchaseController.php:
public function completed()
{
//FAHIM's Paypal IPN Listener
$ipn = new PaypalIPNListener();
$ipn->use_sandbox = true;
$verified = $ipn->processIpn();
$report = $ipn->getTextReport();
Log::info("-----new payment-----");
Log::info($report);
if ($verified) {
if($_POST['address_status'] == 'confirmed'){
//sucess
}
}
}
Run Code Online (Sandbox Code Playgroud)
在routes.php:
Route::post('purchase/completed/', array('as' => 'purchase.completed', 'uses' => 'PurchaseController@completed'));
Run Code Online (Sandbox Code Playgroud)
是否存在与IPN Simulator和Laravel相关的已知问题?
先感谢您.