gpt4 book ai didi

javascript - 如何避免 Laravel 中服务器发送事件的单一路由

转载 作者:太空狗 更新时间:2023-10-29 15:53:46 27 4
gpt4 key购买 nike

所以我正在尝试使用 Server Sent Events在我的 laravel 应用程序中,但问题是在 SSE 中,您只能指定单个 URL,如:

var evtSource = new EventSource("sse.php");

问题是我想从整个应用程序的不同部分/ Controller 发送事件,而不仅仅是单个 sse.php 文件。示例:

// AuthController.php
public function postLogin(Request $request) {
// login logic

// SEND SSE EVENT ABOUT NEW USER LOGIN
}

// FooController.php
public function sendMessage() {
// SEND SSE EVENT ABOUT NEW MESSAGE
}

我想到的唯一想法是,从这些 Controller 创建带有事件文本的临时文件,然后在 sse.php 文件中读取这些文本文件,发送事件,然后删除文件。然而,这看起来并不是完美的解决方案。或者可能以某种方式将 sse.php 文件与 Laravel 事件机制 Hook ,但这似乎有点高级。

我也不介意使用不同的 php 文件创建多个事件源对象,例如 sse.php 但问题是这些 Controller 方法不一定只是单独发送事件,它们还做其他工作出色地。例如,我不能直接在 SSE 对象中使用 postLogin 操作,因为它还执行登录逻辑,而不仅仅是发送事件。

有没有人遇到过类似的问题,如何解决?

最佳答案

从未使用过 SSE,但根据他们的文档,我想到了两种解决方案:

1.定义多个EventSource 对象并在您的js 中以不同方式处理它们:

var loginSource = new EventSource("{!! url("/loginsse") !!}");
var messageSource = new EventSource("{!! url("/messagesse") !!}");

2。在您的 sse.php 文件中,检查来自其他 Controller 的更新:

//sse.php called function
while(1) {
$login = AuthController::postLogin($request);
if ($login) return $login;

$msg = FooController::sendMessage();
if ($msg) return $msg;
// ...
}

您需要创建 sendMessage()postLogin(Request $request) 静态方法。

还要考虑采用一些库来将 SSE 与 laravel 结合使用:快速谷歌搜索为我提供了几种可能性。

关于javascript - 如何避免 Laravel 中服务器发送事件的单一路由,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45174029/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com