Więc staram się wykorzystywać Server Sent Events w moim laravel aplikacji, ale problemem jest to, że w SSE, można określić tylko jeden adres URL w:Jak uniknąć pojedynczej trasy w laravel na serwer wysłał Wydarzenia
var evtSource = new EventSource("sse.php");
The Problem polega na tym, że chcę wysyłać zdarzenia z różnych części/kontrolerów całej aplikacji, nie tylko pojedynczego pliku sse.php
. Przykład:
// 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
}
Jedyny pomysł, który przychodzi mi do głowy to, że z tych sterowników, tworzenie plików tymczasowych z tekstem zdarzeń, a następnie odczytać te pliki tekstowe w sse.php
pliku, wysyłania zdarzeń, a następnie usunąć pliki. Jednak nie wygląda to na idealne rozwiązanie. A może jakiś plik hakowy sse.php
z mechanizmem zdarzeń Laravel, ale to wydaje się nieco zaawansowane.
Nie mam również nic przeciwko tworzeniu wielu obiektów źródłowych zdarzeń z różnymi plikami php, takimi jak sse.php
, ale problem polega na tym, że te metody kontrolerów niekoniecznie wysyłają same zdarzenia, ale także wykonują inną pracę. Na przykład nie mogę użyć akcji postLogin
bezpośrednio w obiekcie SSE, ponieważ wykonuje ona również logikę logowania, nie tylko wysyłając wydarzenie.
Czy ktoś miał podobny problem i jak sobie z nim radzić?
Zamieszczam to jako komentarz, ponieważ nie jest (i nie jestem pewien, czy jest) idealnym rozwiązaniem. Stworzyłem 1 punkt końcowy API w laravel, który pobiera pewien parametr (treść POST lub ciąg zapytania), który określa, jakie "części/kontrolery" chce się wyświetlać. Obudowa przełącznika w twoim "głównym" kontrolerze, jeśli chcesz. –
@ThomasMoors: Jak byś powiedział z obiektu źródła zdarzenia, który metoda kontrolera ma wywoływać, ponieważ nie ma dodatkowych parametrów argumentu? Var evtSource = new EventSource ("sse.php"); '. Obawiam się też, że to nie zadziała w przypadku akcji 'postLogin', która również wykonuje logikę logowania, nie tylko wysyłając wydarzenie. – dev02
Mój zły: nie obsługuje [POST tylko GET] (https://stackoverflow.com/questions/34261928/server-sent-events-pass-parameter-by-post-method) Więc jesteś w dół, aby zapytać o żądanie GET parametry: 'var evtSource = new EventSource (" sse.php? whatIwant = theSpecialController ");' –