Table des matières
- Introduction
- Présentation du concept de Broadcasting
- Installation côté client
- Installation côté serveur
- Manipulation des événements de diffusion
- Conclusion
1. Introduction
Le broadcasting dans Laravel permet de diffuser des événements en temps réel entre votre serveur et vos clients via des technologies comme WebSockets ou Pusher. Ce tutoriel vous guidera à travers la mise en place et l'utilisation du broadcasting dans une application Laravel.
Mindmap avec Mermaid.js
2. Présentation du concept de Broadcasting
Le broadcasting permet de transmettre des messages en temps réel entre votre serveur et vos clients. Cela est particulièrement utile pour des fonctionnalités comme les notifications en temps réel, les mises à jour de chat, les mises à jour de statut, etc.
Mindmap des concepts avec Mermaid.js
Graphique des concepts avec Mermaid.js
3. Installation côté client
Pour utiliser le broadcasting côté client, vous aurez besoin de bibliothèques JavaScript comme Pusher JS ou Socket.IO.
Installation de Pusher JS
Installez Pusher JS via npm ou yarn :
npm install pusher-js
ou
yarn add pusher-js
Importez Pusher JS dans votre fichier JavaScript principal (par exemple,
resources/js/app.js
) :import Pusher from 'pusher-js'; window.Pusher = Pusher;
Configurez Pusher avec vos clés d'API :
const pusher = new Pusher('your-pusher-key', { cluster: 'your-cluster', forceTLS: true }); const channel = pusher.subscribe('my-channel'); channel.bind('my-event', function(data) { console.log('Received:', data); });
Installation de Socket.IO
Installez Socket.IO via npm ou yarn :
npm install socket.io-client
ou
yarn add socket.io-client
Importez Socket.IO dans votre fichier JavaScript principal (par exemple,
resources/js/app.js
) :import io from 'socket.io-client'; window.io = io; const socket = io('http://localhost:6001'); socket.on('my-event', function(data) { console.log('Received:', data); });
4. Installation côté serveur
Pour utiliser le broadcasting côté serveur, vous aurez besoin de configurer Laravel pour utiliser un driver de broadcasting comme Pusher, Redis ou Sockets.IO.
Configuration de Pusher
Installez le package Pusher Laravel :
composer require pusher/pusher-php-server
Configurez les variables d'environnement dans
.env
:BROADCAST_DRIVER=pusher PUSHER_APP_ID=your-app-id PUSHER_APP_KEY=your-app-key PUSHER_APP_SECRET=your-app-secret PUSHER_APP_CLUSTER=your-cluster PUSHER_USE_TLS=true
Configurez le fichier
config/broadcasting.php
pour utiliser Pusher :'connections' => [ 'pusher' => [ 'driver' => 'pusher', 'key' => env('PUSHER_APP_KEY'), 'secret' => env('PUSHER_APP_SECRET'), 'app_id' => env('PUSHER_APP_ID'), 'options' => [ 'cluster' => env('PUSHER_APP_CLUSTER'), 'useTLS' => env('PUSHER_USE_TLS') === 'true', ], ], ],
Configuration de Redis
Installez Redis sur votre machine.
Installez le package Laravel Echo pour gérer les événements en temps réel :
npm install laravel-echo pusher-js
ou
yarn add laravel-echo pusher-js
Configurez les variables d'environnement dans
.env
:BROADCAST_DRIVER=redis QUEUE_CONNECTION=redis
Configurez le fichier
config/broadcasting.php
pour utiliser Redis :'connections' => [ 'redis' => [ 'driver' => 'redis', 'connection' => 'default', ], ],
Configurez Laravel Echo dans
resources/js/bootstrap.js
:import Echo from 'laravel-echo'; import Pusher from 'pusher-js'; window.Pusher = Pusher; window.Echo = new Echo({ broadcaster: 'pusher', key: process.env.MIX_PUSHER_APP_KEY, cluster: process.env.MIX_PUSHER_APP_CLUSTER, forceTLS: true });
Configuration de Sockets.IO
Installez le package Laravel Echo pour gérer les événements en temps réel :
npm install laravel-echo socket.io-client
ou
yarn add laravel-echo socket.io-client
Configurez les variables d'environnement dans
.env
:BROADCAST_DRIVER=pusher PUSHER_APP_ID=your-app-id PUSHER_APP_KEY=your-app-key PUSHER_APP_SECRET=your-app-secret PUSHER_APP_CLUSTER=your-cluster PUSHER_USE_TLS=true
Configurez le fichier
config/broadcasting.php
pour utiliser Pusher (ou configurez Sockets.IO manuellement) :'connections' => [ 'pusher' => [ 'driver' => 'pusher', 'key' => env('PUSHER_APP_KEY'), 'secret' => env('PUSHER_APP_SECRET'), 'app_id' => env('PUSHER_APP_ID'), 'options' => [ 'cluster' => env('PUSHER_APP_CLUSTER'), 'useTLS' => env('PUSHER_USE_TLS') === 'true', ], ], ],
Configurez Laravel Echo dans
resources/js/bootstrap.js
:import Echo from 'laravel-echo'; import io from 'socket.io-client'; window.io = io; window.Echo = new Echo({ broadcaster: 'socket.io', host: window.location.hostname + ':6001' });
5. Manipulation des événements de diffusion
Création d'un événement
Créez un événement Laravel :
php artisan make:event StatusUpdated
Implémentez l'événement dans
app/Events/StatusUpdated.php
:namespace App\Events; use Illuminate\Broadcasting\Channel; use Illuminate\Broadcasting\InteractsWithSockets; use Illuminate\Broadcasting\PresenceChannel; use Illuminate\Broadcasting\PrivateChannel; use Illuminate\Contracts\Broadcasting\ShouldBroadcast; use Illuminate\Foundation\Events\Dispatchable; use Illuminate\Queue\SerializesModels; class StatusUpdated implements ShouldBroadcast { use Dispatchable, InteractsWithSockets, SerializesModels; public $status; public function __construct($status) { $this->status = $status; } public function broadcastOn() { return new Channel('status-channel'); } }
Diffusion de l'événement
Dans votre contrôleur ou service, déclenchez l'événement :
use App\Events\StatusUpdated; public function updateStatus($status) { event(new StatusUpdated($status)); }
Écoute de l'événement côté client
Écoutez l'événement dans votre fichier JavaScript principal (par exemple,
resources/js/app.js
) :window.Echo.channel('status-channel') .listen('StatusUpdated', (e) => { console.log('Status updated:', e.status); });
Exemple complet
Événement StatusUpdated
namespace App\Events;
use Illuminate\Broadcasting\Channel;
use Illuminate\Broadcasting\InteractsWithSockets;
use Illuminate\Broadcasting\PresenceChannel;
use Illuminate\Broadcasting\PrivateChannel;
use Illuminate\Contracts\Broadcasting\ShouldBroadcast;
use Illuminate\Foundation\Events\Dispatchable;
use Illuminate\Queue\SerializesModels;
class StatusUpdated implements ShouldBroadcast
{
use Dispatchable, InteractsWithSockets, SerializesModels;
public $status;
public function __construct($status)
{
$this->status = $status;
}
public function broadcastOn()
{
return new Channel('status-channel');
}
}
Contrôleur
namespace App\Http\Controllers;
use App\Events\StatusUpdated;
class StatusController extends Controller
{
public function update($status)
{
event(new StatusUpdated($status));
return response()->json(['message' => 'Status updated']);
}
}
Fichier JavaScript (resources/js/app.js
)
import Echo from 'laravel-echo';
import Pusher from 'pusher-js';
window.Pusher = Pusher;
window.Echo = new Echo({
broadcaster: 'pusher',
key: process.env.MIX_PUSHER_APP_KEY,
cluster: process.env.MIX_PUSHER_APP_CLUSTER,
forceTLS: true
});
window.Echo.channel('status-channel')
.listen('StatusUpdated', (e) => {
console.log('Status updated:', e.status);
});
6. Conclusion
Nous avons maintenant exploré le concept de broadcasting dans Laravel, comment installer les bibliothèques nécessaires côté client et serveur, et comment manipuler les événements de diffusion. Le broadcasting est un outil puissant pour ajouter des fonctionnalités en temps réel à votre application Laravel.
Mindmap finale avec Mermaid.js
Graphique final avec Mermaid.js
J'espère que ce tutoriel vous a été utile ! N'hésitez pas à poser des questions si vous avez besoin de plus d'informations.