Laravel SSE(服务器发送事件)是将更改推送到前端的绝佳解决方案,但是,在服务器端,我们需要一种有效的方法来跟踪更新记录,然后再将通知发送给前端。但是,SSE要求控制器与之配合使用,问题在于控制器如何捕获Laravel事件?
Exception in thread "main" java.lang.OutOfMemoryError: GC overhead limit exceeded
[java] at java.util.BitSet.initWords(BitSet.java:166)
[java] at java.util.BitSet.<init>(BitSet.java:143)
[java] at edu.umd.cs.findbugs.ba.LiveLocalStoreAnalysis.createFact(LiveLocalStoreAnalysis.java:58)
[java] at edu.umd.cs.findbugs.ba.LiveLocalStoreAnalysis.createFact(LiveLocalStoreAnalysis.java:45)
[java] at edu.umd.cs.findbugs.ba.Dataflow.execute(Dataflow.java:318)
[java] at edu.umd.cs.findbugs.classfile.engine.bcel.LiveLocalStoreDataflowFactory.analyze(LiveLocalStoreDataflowFactory.java:68)
[java] at edu.umd.cs.findbugs.classfile.engine.bcel.LiveLocalStoreDataflowFactory.analyze(LiveLocalStoreDataflowFactory.java:38)
[java] at edu.umd.cs.findbugs.classfile.impl.AnalysisCache.analyzeMethod(AnalysisCache.java:369)
[java] at edu.umd.cs.findbugs.classfile.impl.AnalysisCache.getMethodAnalysis(AnalysisCache.java:
答案 0 :(得分:0)
Laravel提供事件,侦听器,广播和通过事件与前端通信的渠道。您无需在控制器中执行此操作。您可以在
中定义广播路线routes/channels.php
然后,您可以定义默认情况下在脚手架中包括广播方法的事件。
public function broadcastOn()
{
return new PrivateChannel('channel-name');
}
将事件的侦听器绑定到事件,并实现“应该”接口以将其作为异步作业运行。您还可以使用laravel通知来提供实时通知。 laravel broadcasting
如果您仍想在控制器中捕获事件,则可以在EventServiceProvider中指定为
class EventServiceProvider extends ServiceProvider
{
protected $listen = [
DownloadFile::class => [
CompanyDashboardController::class,
],
];
public function boot()
{
parent::boot();
}
}
您的活动看起来像
class DownloadFile
{
use Dispatchable, InteractsWithSockets, SerializesModels;
public $process_id;
public function __construct($process_id)
{
$this->process_id = $file;
}
}
最后,您可以像下面这样在控制器中捕获此事件:
class CompanyDashboardController extends Controller
{
public function __construct()
{
//constructor
}
public function handle(DownloadFile $event)
{
if($event->process_id == 1)
{
return "something";
}
}
}
如果您打算使用某个Javascript事件而不是Laravel,请阅读 Use Server-Sent Events to push messages to browser