Laravel: Unterschied zwischen Notifications und Broadcasting

FrazeColder

Lt. Commander
Registriert
Okt. 2013
Beiträge
1.718
Hallo zusammen,

ich erstelle derzeit eine Laravel-Anwedung und möchte natürlich auch, wie in fast jeder Anwendung heutzutage, User benachrichten, wenn z.B. jemand unter ihrem Kommentar kommentiert hat. Das möchte ich sowohl per E-Mail, als auch per "Notification" in der Web-Anwendung, welche nicht auf VueJS, sondern mit normalem HTML, CSS und JS läuft. Sprich, wie bei Facebook oben über eine Glocke.

Ich habe bereits herausgefunden, dass ich für mein Vorhaben mit den E-Mails das ganze per Notifications realisiere. Nun frage ich mich allerdings, was der Unterschied zwischen Notifications und Broadcasting ist. Zudem verstehe ich nicht, wieso bei der Dokumentation von Laravel (Broadcasting) auch noch die Rede von Third-Party-Librarys wie Pusher, Redis oder Socket.IO ist. +

Ich könnte auch hingehen und einen Ajax laufen lassen, der einfach alle x Sekunden dem Server eine Anfrage schickt und schaut ob es eine neue Benachrichtigung für den User gibt. Das ist allerdings nicht die elegante Lösung und kann bei Skalierung der User auch zu Problemen führen.

Des Weiteren möchte ich später auch noch Push Notifications hinzufügen. Diese benötige ich allerdings jetzt noch nicht. Hier macht es Sinn, dass ich eine Third-Party-Librarys wie Pusher oder OneSignal benötige. Wieso aber, wenn ich in der App direkt vom Server zum Client eine Benachrichtigung schicken möchte, dass z.B. ein Kommentar kommentiert wurde?

Also, hier noch einmal zusammengefasst meine Frage:
  1. Was ist der Unterschied zwischen Laravel Notifications und Laravel Broadcasting?
  2. Wieso benötige ich für Laravel Broadcasting Third-Party-Librarys wie Pusher, Redis oder Socket.IO?
  3. Kann ich Laravel Broadcasting auch ohne Third-Party-Librarys wie Pusher, Redis oder Socket.IO durchführen?
  4. Wieso benötige ich überhaupt Third-Party Librarys für eine Benachrichtigung vom Server zum Client? (Hierbei rede ich nicht von Push Notifications wie über OneSignal oder Pusher, sondern eben über "Dein Kommentar wurde kommentiert" Benachrichtigungen).
  5. Ich würde gerne verstehen, was der Unterschied zwischen Push Benachrichtigungen und den Benachrichtigungen "Dein Kommentar wurde kommentiert" ist. Kann mir das jemand erklären?
Vielen Dank und MfG!
 
hey,

vlt hast du deine Antwort auch schon in der Laravel Doku und anderen Seiten gefunden.

Aber im Grunde verstehe ich das so:
1. Notifications vs Broadcasting
Laravel Notification ist ein gesonderter Kanal für z.B. E-Mail, SMS, Slack Messenger
Broadcasting: im engsten Sinne eine Nachricht an alle Teilnehmer eines Kanals.
Hier wird zwischen Browser und App eine konstante WebSocket Verbindung aufgebaut. Du kannst jetzt z.B. alle Tabs/Sessions eines Users über die selbe WebSocket Verbindung verwalten und an alle Verbindungen broadcasten. Somit wären z.B. neue Kommentare in jedem Tab/jeder Session gepusht sichtbar.

2. statt wie bei REST dem Anfrager direkt zu antworten wird bei WebSockets die Antwort z.B. in eien Redis Queue geschoben. Die über den WebSocket verbundenen Clients bekommen dann die eine Antwort aus der Queue. (statt z.B. 1000 einzelne Anfragen neu auf- und abzubauen wird hier eine Verbindung konsequent offen gehalten und einmal jeder Client informiert)

3. das weiß ich nicht - mein Wissen kommt hier aus der .Net Welt. (ich würde sagen nicht ohne das Rad neu zu erfinden)

4. brauchst du bei NICHT-Push doch auch nicht aber dann muss dein Client zwangsläufig alle x Sekunden pollen und bekommt da wahrscheinlich in 99% der Fällen die selbe Antwort.

5. Push = dein Client hält eine Verbindung zum Backend offen. In meinem Fall wird der WebSocket für Preisänderungen genutzt. Sobald sich der Preis (oder alle xxxx Preise) verändert, verändert sich beim Kunden auch das Frontend.

"Dein Kommentar wurde kommentiert" kann auch über push realisiert werden oder z.b. über AJAX REST calls.
Bei letzterem muss der Call jedes mal durch den gesamten Laravel Controller Boot/Shutdown Prozess durch.

Wenn du eine User hast der in kurzer Zeit hunderte neue Kommentare bekommt müsste das Frontend alle paar Sekunden diese Kommentare neu ziehen.
REST würde dann vermutlich irgendwie so aussehen.
1. Endpoint der dir Kommentare gibt (mit Offset?)
2. HasNewComments endpoint der dir mitteilt das es neue Kommentare gibt und du entweder direkt auch neue Kommentare bekommst (wobei was ist hier "neu") oder nur die Info und du musst anschließend wieder 1. ausführen

Bei WebSocket Broadcast würdest du den neuen Kommentar direkt gepusht bekommen. Keine Notwendigkeit abzufragen ob es neue Kommentare gibt und du musst den neuen Kommentar auch nicht mehr pullen.


Unabhängig wie das jetzt bei Laravel genau funktioniert würde ich die "Neuer Kommentar" Info erst über den WebSocket broadcasten wenn jedoch keine Verbindung offen ist den alternativen Kanal nutzen. (E-Mail).


Ich hoffe ich konnte dir ein wenig auf die Sprünge helfen. Meine Form ist hier nicht die Beste aber deine Frage auch relativ umfangreich.
 
Zurück
Oben