Dalam banyak aplikasi modern, WebSocket digunakan untuk implementasi realtime update. Ketika data diupdate di server, sebuah message biasanya dikirim melalui koneksi WebSocket untuk ditangani disisi client. Untuk membantu kita dalam membangun aplikasi sejenis ini, Laravel menyediakan fitur Broadcasting untuk mengirim event melalui koneksi WebSocket. Oleh karena itu, pada artikel ini kita akan mencoba membahas bagaimana Setup Broadcasting pada Laravel.
Sebelum bisa menggunakan fitur Broadcasting dari Laravel, ada beberapa konfigurasi yang harus kita lakukan terlebih dahulu.
Mengaktifkan Broadcast ServiceProvider
Untuk mengaktifkan BroadcastServiceProvider buka file config/app.php pada project Laravel kita, pada bagian providers kita akan melihat kode seperti ini.
'providers' => [
//
/*
* Application Service Providers...
*/
App\Providers\AppServiceProvider::class,
App\Providers\AuthServiceProvider::class,
// App\Providers\BroadcastServiceProvider::class,
App\Providers\EventServiceProvider::class,
App\Providers\RouteServiceProvider::class,
],
Seperti kita lihat, BroadcastServiceProvider tidak diaktifkan secara default. Untuk bisa menggunakan fitur Broadcasting dari laravel, kita harus mengaktifkan BroadcastServiceProvider dengan cara menghapus comment pada baris ini.
'providers' => [
//
/*
* Application Service Providers...
*/
App\Providers\AppServiceProvider::class,
App\Providers\AuthServiceProvider::class,
App\Providers\BroadcastServiceProvider::class,
App\Providers\EventServiceProvider::class,
App\Providers\RouteServiceProvider::class,
],
Ketika kita mengaktifkan BroadcastServiceProvider, kita akan memiliki sebuah route baru. Jika kita buka file BroadcastServiceProvider kita akan melihat pada class ini Laravel meregister route baru.
class BroadcastServiceProvider extends ServiceProvider
{
/**
* Bootstrap any application services.
*
* @return void
*/
public function boot()
{
Broadcast::routes();
require base_path('routes/channels.php');
}
}
Broadcast::routes()
akan meregister route baru dengan url broadcasting/auth
seperti terlihat dibawah ini.

Route broadcasting/auth
akan menangani authorization untuk private channel. Kita akan membahas mengenati authorization ini pada artikel selanjutnya pada series ini.
Broadcasting config
Pengaturan Event broadcasting pada Laravel disimpan dalam file config/broadcasting.php. Pada saat artikel ini dibuat, Laravel support beberapa driver yang kita bisa gunakan dalam fitur broadcasting ini, driver yang disupport secara default adalah pusher, redis, log dan null.
'default' => env('BROADCAST_DRIVER', 'null'),
Pada kode diatas, bisa kita lihat bahwa pengaturan driver default di set di .env file, jika kita lihat pada file .env driver log digunakan secara default.
BROADCAST_DRIVER=log
Selanjutnya mari kita coba fitur broadcasting ini. Pertama buat sebuah event baru dengan menggunakan command artisan, misalnya event OrderStatusUpdated.
php artisan make:event OrderStatusUpdated
Kemudian update OrderStatusUpdated event dengan mengimplement ShouldBroadcast interface.
<?php
namespace App\Events;
use Illuminate\Broadcasting\Channel;
use Illuminate\Broadcasting\InteractsWithSockets;
use Illuminate\Contracts\Broadcasting\ShouldBroadcast;
use Illuminate\Foundation\Events\Dispatchable;
use Illuminate\Queue\SerializesModels;
class OrderStatusUpdated implements ShouldBroadcast
{
use Dispatchable, InteractsWithSockets, SerializesModels;
/**
* Create a new event instance.
*
* @return void
*/
public function __construct()
{
//
}
/**
* Get the channels the event should broadcast on.
*
* @return \Illuminate\Broadcasting\Channel|array
*/
public function broadcastOn()
{
return new Channel('orders');
}
}
Pada artikel ini kita hanya akan membahas fitur broadcasting dasar dengan menggunakan public channel agar kita bisa mengetahui cara kerja dari fitur Broadcast ini. Kita akan membahas penggunaan channel lain pada artikel lainnya.
Event Dispatch
Selanjutnya, kita akan mencoba fitur Broadcast ini dengan mentrigger OrderStatusUpdated event.
use App\Events\OrderStatusUpdated;
Route::get('/', function () {
OrderStatusUpdated::dispatch();
return view('welcome');
});
Karena kita menggunakan driver log untuk Broadcasting, kita bisa melihat hasilnya pada file log yang disimpan di folder storage/logs.

Pada contoh diatas, bisa kita lihat bahwa kita membroadcast OrderStatusUpdated event pada channel orders tanpa data payload apapun.
Event Payload
Terkadang kita juga perlu untuk mengirim data pada saat mengirimkan event. Untuk mengirim data pada dasarnya, kita hanya perlu mengatur public property pada event.
class OrderStatusUpdated implements ShouldBroadcast
{
use Dispatchable, InteractsWithSockets, SerializesModels;
/**
* @var string
*/
public $data = 'ini data';
//
}
Dengan menambahkan public property seperti diatas maka kita bisa lihat pada file log ada penambahan data payload.

Kita juga bisa mengatur property $data
ini melalui constructor.
class OrderStatusUpdated implements ShouldBroadcast
{
use Dispatchable, InteractsWithSockets, SerializesModels;
/**
* @var string
*/
public $data = 'ini data';
/**
* Create a new event instance.
*
* @param string $data
* @return void
*/
public function __construct(string $data)
{
$this->data = $data;
}
//
}
Untuk pemanggilan event kita menggunakan sedikit cara yang berbeda karena kita perlu mengirimkan data pada saat inisialisasi event.
Route::get('/', function () {
event(new OrderStatusUpdated('hello'));
return view('welcome');
});

Dengan artikel ini diharapkan kita bisa memahami bagaimana Setup Broadcasting pada Laravel, sehingga kita bisa menggunakan fitur ini ketika diperlukan dalam project yang kita bangun.
No Comments
Leave a comment Cancel