1. Laravel
  2. PHP

Laravel – Setup Broadcasting

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 List

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 pusherredislog 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.

Broadcasting Log
Broadcasting Log

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.

Broadcasting Log
Broadcasting Log

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');
});
Broadcasting Log
Broadcasting Log

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.

Comments to: Laravel – Setup Broadcasting

    Your email address will not be published. Required fields are marked *

    Attach images - Only PNG, JPG, JPEG and GIF are supported.