Laravel WebSockets bisa dijalankan secara offline tanpa memerlukan layanan pihak ketiga seperti Pusher. Laravel WebSockets adalah solusi yang bisa berfungsi sebagai server WebSocket mandiri di server lokal atau server yang kamu kelola, sehingga kamu dapat menggunakannya tanpa koneksi internet atau layanan cloud.
- Kelebihan Laravel WebSockets secara Offline:
- Tidak perlu layanan eksternal: Kamu tidak memerlukan layanan pihak ketiga seperti Pusher, sehingga semua komunikasi real-time bisa dilakukan di server lokal.
- Pengembangan lokal: Kamu dapat menjalankan server WebSocket di lingkungan pengembangan (local development) tanpa internet.
- Menghemat biaya: Tidak perlu membayar layanan pihak ketiga untuk pengiriman pesan real-time.
- Kontrol penuh: Kamu memiliki kontrol penuh terhadap server WebSocket, sehingga bisa dikonfigurasi sesuai kebutuhan aplikasi.
Langkah untuk Menjalankan Laravel WebSockets Secara Offline
1. Instal Laravel WebSockets
Pertama, instal Laravel WebSockets di proyek Laravel kamu:
composer require beyondcode/laravel-websockets
2. Publikasikan Konfigurasi
Publikasikan file konfigurasi dan file migrasi:
php artisan vendor:publish --provider="BeyondCode\LaravelWebSockets\WebSocketsServiceProvider" --tag="config"
php artisan migrate
3. Konfigurasi Pusher secara Lokal
Meskipun kita tidak menggunakan layanan Pusher, Laravel WebSockets tetap menggunakan driver Pusher untuk kompatibilitas dengan Laravel Echo. Kamu bisa menggunakan pengaturan berikut di file .env:
BROADCAST_DRIVER=pusher
PUSHER_APP_ID=local-app-id
PUSHER_APP_KEY=local-app-key
PUSHER_APP_SECRET=local-app-secret
PUSHER_APP_CLUSTER=mt1
Di file config/broadcasting.php, pastikan kamu mengkonfigurasi pusher untuk menggunakan server WebSocket lokal:
'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' => false,
'host' => '127.0.0.1',
'port' => 6001,
'scheme' => 'http',
'encrypted' => false,
],
],
Dengan pengaturan ini, aplikasi akan menggunakan server WebSocket lokal yang berjalan di port 6001 tanpa memerlukan TLS (karena dijalankan secara offline).
4. Menjalankan Server WebSocket
Jalankan server WebSocket menggunakan perintah:
php artisan websockets:serve
Ini akan memulai server WebSocket yang berjalan di localhost pada port 6001.
5. Mengonfigurasi Laravel Echo di Frontend
Di sisi frontend, gunakan Laravel Echo untuk mendengarkan event dari WebSocket lokal. Misalnya, di file app.js atau bootstrap.js, inisialisasi Laravel Echo seperti ini:
import Echo from 'laravel-echo';
window.Pusher = require('pusher-js');
window.Echo = new Echo({
broadcaster: 'pusher',
key: process.env.MIX_PUSHER_APP_KEY, // Sesuaikan dengan .env kamu
wsHost: window.location.hostname,
wsPort: 6001,
forceTLS: false, // Nonaktifkan TLS untuk offline
disableStats: true,
});
Dengan konfigurasi ini, frontend akan mendengarkan event dari server WebSocket lokal tanpa memerlukan koneksi internet.
6. Broadcast Event
Gunakan event broadcasting di Laravel seperti biasa. Contoh sederhana untuk broadcast event ke frontend:
use App\Events\MessageSent;
// Kirim pesan ke channel chat
broadcast(new MessageSent('Hello, this is a message'))->toOthers();
Di sisi frontend, kamu bisa mendengarkan event yang dikirim:
window.Echo.channel('chat-channel')
.listen('.message.sent', (e) => {
console.log(e.message);
});