Heim > Artikel > PHP-Framework > Laravel-Entwicklung: Wie kann man mit Laravel Broadcasting Event-Broadcasting implementieren?
In Echtzeit-Webanwendungen ist die Übertragung von Ereignissen eine der sehr wichtigen Funktionen. Das Laravel-Framework bietet sofort einsatzbereite Event-Broadcasting-Funktionen, und Event-Broadcasting und -Überwachung können einfach über Laravel Broadcasting implementiert werden. In diesem Artikel wird erläutert, wie Sie mit Laravel Broadcasting die Übertragung von Ereignissen implementieren.
1. Verständnis der Ereignisübertragung
Wenn in Webanwendungen ein Ereignis eintritt, z. B. eine erfolgreiche Benutzerregistrierung, eine Artikelveröffentlichung usw., hoffen wir, dass andere Benutzer rechtzeitig relevante Informationen erhalten können. Wenn Sie derzeit die herkömmliche Seitenaktualisierungs- oder Ajax-Abfragemethode verwenden, verbraucht diese viel Bandbreite und Serverressourcen und kann den Echtzeitbedarf nicht decken. Event-Broadcasting kann dieses Problem lösen.
Bei der Ereignisübertragung wird ein Ereignis an einen bestimmten Kanal oder eine bestimmte Übertragungsgruppe gesendet. Anschließend können Benutzer, die den bestimmten Kanal oder die bestimmte Übertragungsgruppe überwachen, sofort relevante Informationen empfangen. Durch Event-Broadcasting kann die Anzahl der Kommunikationen zwischen Server und Client erheblich reduziert, Netzwerklatenz und Bandbreitenverbrauch reduziert sowie die Leistung und Benutzererfahrung von Webanwendungen verbessert werden.
2. Installieren Sie Laravel Broadcasting
Bevor Sie Laravel Broadcasting verwenden, müssen Sie Laravel Echo und die zugehörigen Broadcast-Treiber installieren. Laravel Echo ist die Socket.io-Clientbibliothek, die mit dem Laravel-Framework geliefert wird und für die Echtzeitkommunikation mit Broadcast-Diensten verwendet wird. Der Broadcast-Treiber stellt APIs für die Interaktion mit verschiedenen Broadcast-Diensten wie Redis und Pusher bereit. In diesem Artikel verwenden wir Pusher als Broadcast-Dienst.
npm install --save laravel-echo pusher-js
AppProvidersBroadcastServiceProvider::class,
BROADCAST_DRIVER=pusher PUSHER_APP_ID=your-app-id PUSHER_APP_KEY=your-app-key PUSHER_APP_SECRET=your-app-secretIm obigen Code haben wir ein UserRegistered-Ereignis erstellt Klasse und injizierte das Benutzermodell in die Konstruktionsmethode. Anschließend definieren wir in der Methode „broadcastOn()“ den Kanal, an den das Ereignis gesendet werden muss, wobei ein privater Kanal in der Form „user.{user_id}“ angegeben wird. Als nächstes müssen wir einen UserChannel-Kanal erstellen, um Benutzer des Kanals „user.{user_id}“ zu überwachen. Es gibt zwei Möglichkeiten, einen UserChannel-Kanal zu erstellen: manuelle Registrierung und automatische Erkennung. Manuelle Registrierungsmethode: Registrieren Sie den UserChannel-Kanal in der Datei app/Providers/BroadcastServiceProvider.php:
php artisan make:event UserRegisteredAutomatische Erkennungsmethode: Erstellen Sie eine UserChannel.php-Datei im Verzeichnis app/Broadcasting und ändern Sie den Code wie folgt:
namespace AppEvents; use AppUser; use IlluminateQueueSerializesModels; use IlluminateFoundationEventsDispatchable; class UserRegistered { use Dispatchable, SerializesModels; public $user; /** * Create a new event instance. * * @param AppUser $user * @return void */ public function __construct(User $user) { $this->user = $user; } /** * Get the channels the event should broadcast on. * * @return IlluminateBroadcastingChannel|array */ public function broadcastOn() { return new Channel('user.'.$this->user->id); } }Im obigen Code haben wir eine UserChannel-Kanalklasse erstellt und das User-Modell in den Konstruktor eingefügt. Überprüfen Sie dann, ob der Benutzer über die Methode „join()“ Zugriff auf den Kanal hat. 4. Ereignisse übertragenNachdem wir Ereignisse und Kanäle erstellt haben, können wir die Funktion „broadcast()“ verwenden, um Ereignisse an den angegebenen Kanal zu übertragen. In diesem Artikel implementieren wir die UserRegistered-Ereignisübertragung in der UserController-Klasse nach erfolgreicher Benutzerregistrierung:
use IlluminateSupportFacadesBroadcast; use AppBroadcastingUserChannel; Broadcast::channel('user.{userId}', UserChannel::class);Im obigen Code erstellen wir zunächst einen Benutzer und führen einen Speichervorgang durch. Verwenden Sie dann die Funktion event(), um das UserRegistered-Ereignis zu übertragen und andere Benutzer darüber zu informieren, dass sich ein neuer Benutzer erfolgreich registriert hat. 5. Ereignisse überwachenNach dem Erstellen von Ereignissen und Kanälen können andere Benutzer Ereignisse empfangen, indem sie die entsprechenden Kanäle überwachen. Als nächstes werden wir über Laravel Echo auf das UserRegistered-Ereignis warten.
Ändern Sie die Konfigurationsdatei
Fügen Sie zunächst den folgenden Code in die Datei resources/assets/js/bootstrap.js ein:namespace AppBroadcasting; use AppUser; class UserChannel { /** * Create a new channel instance. * * @param AppUser $user * @return void */ public function __construct(User $user) { $this->user = $user; } /** * Authenticate the user's access to the channel. * * @return array|bool */ public function join(User $user, $userId) { return $user->id === (int) $userId; } }Im obigen Code verwenden wir Laravel Echo und Pusher SDK, um den Pusher-Broadcast-Dienst zu verbinden . PUSHER_APP_KEY und PUSHER_APP_CLUSTER können in der .env-Datei festgelegt werden.
Erstellen Sie einen Listener
namespace AppHttpControllers; use AppUser; use AppEventsUserRegistered; use IlluminateHttpRequest; class UserController extends Controller { /** * Register a new user. * * @param IlluminateHttpRequest $request * @return IlluminateHttpResponse */ public function register(Request $request) { $user = new User([ 'name' => $request->input('name'), 'email' => $request->input('email'), 'password' => bcrypt($request->input('password')), ]); $user->save(); event(new UserRegistered($user)); return response()->json([ 'message' => 'User registered successfully!', 'user' => $user, ]); } }
Das obige ist der detaillierte Inhalt vonLaravel-Entwicklung: Wie kann man mit Laravel Broadcasting Event-Broadcasting implementieren?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!