Broadcasting in Laravel allows you to broadcast events to your WebSocket server (like Pusher) and then push those events to connected clients in real-time. Laravel Echo is a JavaScript library that makes it easy to subscribe to channels and listen for broadcasted events. Broadcasting is often used for features like real-time notifications, live updates, and chat applications.
Here's a basic step-by-step guide on how to implement broadcasting with Laravel Echo:
Set Up Broadcasting Driver:
Laravel supports multiple broadcasting drivers like Pusher, Redis, and more. You need to configure your .env
file with the appropriate broadcasting driver settings. For example, for Pusher:
envBROADCAST_DRIVER=pusher PUSHER_APP_ID=your-app-id PUSHER_APP_KEY=your-app-key PUSHER_APP_SECRET=your-app-secret PUSHER_APP_CLUSTER=your-app-cluster
Install the necessary packages if you haven't already:
bashcomposer require pusher/pusher-php-server
npm install --save laravel-echo pusher-js
Set Up Broadcasting Event:
Create a broadcasting event using the make:event
artisan command:
bashphp artisan make:event MyEvent
Modify the generated event class to broadcast the event:
php// app/Events/MyEvent.php
class MyEvent implements ShouldBroadcast
{
public $data;
public function __construct($data)
{
$this->data = $data;
}
public function broadcastOn()
{
return new Channel('my-channel');
}
}
Broadcast the Event:
Trigger the event from your controller, service, or wherever you want to broadcast it:
phpevent(new MyEvent('Broadcast this data'));
Listen to the Event with Laravel Echo:
In your JavaScript, use Laravel Echo to listen for the event:
javascript// resources/js/bootstrap.js or any other JavaScript file
import Echo from 'laravel-echo';
window.Echo = new Echo({
broadcaster: 'pusher',
key: process.env.MIX_PUSHER_APP_KEY,
cluster: process.env.MIX_PUSHER_APP_CLUSTER,
encrypted: true,
});
window.Echo.channel('my-channel')
.listen('MyEvent', (event) => {
console.log('Event received:', event);
// Handle the event data
});
Make sure to include the necessary scripts in your HTML layout to load Laravel Echo and Pusher.