Laravel Reverb : ajouter des notifications en temps réel à votre application
11 Nov 2026 | Développement Web et Mobile
Un nouveau lead arrive dans le CRM, un export est prêt, un collègue modifie un dossier : vos utilisateurs ne devraient pas avoir à rafraîchir la page pour le savoir. Laravel Reverb, le serveur WebSocket officiel de Laravel, permet d'ajouter du temps réel sans service tiers. Voici la mise en place complète.
Comment ça fonctionne
- Votre application déclenche un événement diffusable (
ShouldBroadcast). - Laravel le transmet à Reverb, qui maintient les connexions WebSocket.
- Dans le navigateur, Laravel Echo écoute le canal et met l'interface à jour.
Installation
php artisan install:broadcasting
La commande propose d'installer Reverb, ajoute la configuration, le fichier routes/channels.php, les dépendances front (Echo, client Pusher-compatible) et les variables REVERB_* dans le .env. En local, lancez le serveur :
php artisan reverb:start --debug
Créer un événement diffusable
namespace App\Events;
use App\Models\Lead;
use Illuminate\Broadcasting\PrivateChannel;
use Illuminate\Contracts\Broadcasting\ShouldBroadcast;
use Illuminate\Foundation\Events\Dispatchable;
use Illuminate\Queue\SerializesModels;
class LeadAssigned implements ShouldBroadcast
{
use Dispatchable, SerializesModels;
public function __construct(public Lead $lead) {}
public function broadcastOn(): array
{
return [new PrivateChannel('users.'.$this->lead->assigned_to)];
}
public function broadcastWith(): array
{
return [
'id' => $this->lead->id,
'name' => $this->lead->full_name,
];
}
}
broadcastWith() limite les données envoyées : ne diffusez jamais un modèle complet avec des champs sensibles.
Déclenchement :
LeadAssigned::dispatch($lead);
Autoriser le canal privé
Dans routes/channels.php :
Broadcast::channel('users.{id}', function ($user, $id) {
return (int) $user->id === (int) $id;
});
Sans cette autorisation, n'importe qui pourrait écouter les notifications d'un autre utilisateur. Utilisez des canaux privés dès que les données ne sont pas publiques.
Écouter côté navigateur
window.Echo.private(`users.${userId}`)
.listen('LeadAssigned', (e) => {
afficherNotification(`Nouveau lead : ${e.name}`);
});
Avec Vue ou React, les starter kits récents fournissent des helpers (useEcho) qui gèrent l'abonnement et le désabonnement avec le cycle de vie du composant.
Passer par les files d'attente
Un événement ShouldBroadcast est mis en file d'attente : un worker doit tourner. Si la notification doit partir immédiatement et que l'opération est légère, ShouldBroadcastNow diffuse de façon synchrone. Pour le reste, configurez correctement vos workers (voir notre article sur Redis et le cache Laravel).
Déployer Reverb en production
- Processus permanent : lancez
php artisan reverb:startvia Supervisor (ou systemd) pour qu'il redémarre automatiquement. - Proxy inverse : exposez Reverb derrière Nginx en HTTPS (WSS), sur un sous-domaine ou un chemin dédié, avec les en-têtes
UpgradeetConnection. - Limites système : chaque connexion consomme un descripteur de fichier ; augmentez la limite d'ouverture de fichiers si vous attendez beaucoup d'utilisateurs simultanés.
- Redémarrage au déploiement :
php artisan reverb:restartdans votre script de déploiement, comme pour les workers (voir déploiement sur VPS avec GitHub Actions). - Montée en charge : Reverb peut s'étendre horizontalement sur plusieurs serveurs via Redis. Sur Laravel Cloud, des clusters WebSocket managés existent.
Cas d'usage utiles
- Notification d'un nouveau lead attribué à un conseiller.
- Progression d'un import ou d'un export en file d'attente.
- Indicateur « quelqu'un modifie ce dossier » grâce aux canaux de présence.
- Tableau de bord mis à jour en direct.
Conclusion
Reverb rend le temps réel aussi simple que le reste de Laravel : un événement, un canal autorisé, quelques lignes d'Echo. La seule vraie nouveauté est opérationnelle : un processus de plus à superviser en production. Une fois en place, il devient vite indispensable.
Commentaires (0)
Aucun commentaire pour le moment.
Laissez un commentaire