Menghadirkan fitur real-time dengan Laravel Reverb: konfigurasi WebSocket server, broadcasting event dengan ShouldBroadcast, Reverb DB driver baru di Laravel 13 tanpa Redis, dan client Echo untuk notifikasi & chat.

Sejak episode 15 kita me-broadcast event, tapi belum menghubungkannya ke browser. Di episode ini kita lengkapi: aplikasi yang bisa push data ke user secara real-time — notifikasi muncul tanpa refresh, chat terkirim seketika, status "online" terlihat langsung.
Jawaban Laravel untuk ini adalah Reverb — WebSocket server resmi yang sejak Laravel 13 hadir dengan driver database tanpa Redis. Ini mengubah permainan untuk aplikasi menengah yang tidak ingin memelihara infrastruktur tambahan.
Alurnya: aplikasi me-broadcast sebuah event → Reverb menerima dan menyiarkannya ke channel → client yang subscribe channel tersebut menerima update instan. Server tidak perlu di-polling.
composer require laravel/reverb
php artisan reverb:installReverb adalah server terpisah dari aplikasi — jalankan di terminal lain:
php artisan reverb:startDefault Reverb berjalan di port 8080. Konfigurasi di .env:
BROADCAST_CONNECTION=reverb
REVERB_SERVER_HOST=127.0.0.1
REVERB_SERVER_PORT=8080
REVERB_APP_ID=local-app
REVERB_APP_KEY=your-app-key
REVERB_APP_SECRET=your-app-secretJangan lupa aktifkan broadcasting di config/broadcasting.php (default sudah ke reverb setelah install).
Untuk meneruskan event dari aplikasi ke Reverb, Laravel memakai "broadcast driver":
| Driver | Kebutuhan | Kapan dipakai |
|---|---|---|
redis | Redis server | Default sebelum v13; production skala besar |
database (baru di v13) | Tabel broadcast_events | Tanpa Redis — WebSocket langsung, cocok untuk menengah |
Reverb DB driver — fitur baru Laravel 13 — menyimpan event broadcast ke tabel database dan Reverb membacanya, sehingga tidak perlu Redis:
php artisan reverb:install --db
php artisan migrateBROADCAST_CONNECTION=reverb
REVERB_DRIVER=dbTip
Untuk aplikasi yang sudah pakai Redis (misalnya untuk cache & queue di episode 13-14), driver redis tetap pilihan terbaik karena satu infrastruktur untuk banyak kebutuhan. Reverb DB driver menyelamatkan kalian yang belum punya Redis — cuma butuh database yang sudah ada.
Event yang di-broadcast mengimplementasikan ShouldBroadcast (sudah kita lihat sekilas di episode 15):
<?php
namespace App\Events;
use App\Models\Post;
use Illuminate\Contracts\Broadcasting\ShouldBroadcast;
use Illuminate\Foundation\Events\Dispatchable;
use Illuminate\Queue\SerializesModels;
class NewPostPublished implements ShouldBroadcast
{
use Dispatchable, SerializesModels;
public function __construct(
public Post $post,
) {
}
public function broadcastOn(): array
{
return ['posts'];
}
}Trigger dari mana saja:
use App\Events\NewPostPublished;
event(new NewPostPublished($post));Di sisi browser, install Echo + pusher-js (client WebSocket):
npm install --save laravel-echo pusher-jsimport Echo from 'laravel-echo';
import Pusher from 'pusher-js';
window.Echo = new Echo({
broadcaster: 'reverb',
key: import.meta.env.VITE_REVERB_APP_KEY,
wsHost: import.meta.env.VITE_REVERB_HOST,
wsPort: import.meta.env.VITE_REVERB_PORT,
forceTLS: false,
enabledTransports: ['ws', 'wss'],
});Subscribe channel dan dengarkan event:
Echo.channel('posts')
.listen('NewPostPublished', (e) => {
showToast(`Post baru: ${e.post.title}`);
});Sekarang, ketika event(new NewPostPublished($post)) dijalankan di server, semua browser yang membuka channel posts langsung mendapat notifikasi — tanpa polling, tanpa reload.
Warning
Kanal publik (Channel) bisa didengarkan siapa saja. Untuk data pribadi — misalnya notifikasi per-user — gunakan private channel (PrivateChannel) yang diverifikasi dengan broadcast:auth + middleware auth. Untuk chat antar user, private channel per user adalah pola standar.
Kombinasi notifications + broadcast = notifikasi yang muncul instan:
public function via(object $notifiable): array
{
return ['mail', 'database', 'broadcast'];
}
public function toBroadcast(object $notifiable): array
{
return [
'title' => $this->post->title,
];
}Echo.private(`App.Models.User.${userId}`)
.notification((notification) => {
showToast(notification.title);
});Echo.private('App.Models.User.' + id) adalah konvensi channel per-user di Laravel — notifikasi database otomatis di-broadcast ke channel ini.
Inti yang harus dibawa pulang:
reverb:start.redis untuk skala besar, Reverb DB driver (v13) tanpa Redis.ShouldBroadcast di-broadcast ke channel; client mendengarkan lewat Echo.App.Models.User.{id}).Di episode 20 selanjutnya kita akan membahas fitur modern Laravel 13 — Laravel AI SDK, PHP Attributes untuk model/controller/job, Cache::touch(), perbaikan performa, dan cara upgrade dari Laravel 12. Sampai jumpa di episode 20!