laravel broadcast как иcпользовать

Слздаем аккаунт и апку на pusher.com и прописываем в env

BROADCAST_DRIVER=pusher
PUSHER_APP_ID=#данные с pusher.com
PUSHER_KEY=#данные с pusher.com
PUSHER_SECRET=#данные с pusher.com

Установим необходимые компоненты

composer require pusher/pusher-php-server

Создаем событие по которому будет отрабатывать отправка уведомления

php artisan make:event MessageSended



namespace App\Events;

use Illuminate\Broadcasting\Channel;
use Illuminate\Contracts\Broadcasting\ShouldBroadcast;
use Illuminate\Queue\SerializesModels;

class MessageSended implements ShouldBroadcast
{
    use SerializesModels;

    /**
     * @var array
     */
    public $data;

    /**
     * Create a new event instance.
     * @param array $data
     */
    public function __construct(User $user, array $data)
    {
        $this->data = $data;
    }

    /**
     * Get the channels the event should broadcast on.
     *
     * @return Channel|array
     */
    public function broadcastOn()
    {
        return ['user-channel'];
    }

    public function broadcastAs()
    {
        return 'message-sender';
    }
}

Теперь нужно создать слушателя и джобу для ее диспача в слушателе

php artisan make:listener SendMessageNotification --event=MessageSended



namespace App\Listeners;

use App\Events\ChatMessageSend;
use App\Notifications\MessageSend;

class SendMessageNotification
{
    /**
     * Create the event listener.
     */
    public function __construct()
    {
        //
    }

    /**
     * Handle the event.
     *
     * @param  MessageSended  $event
     * @return void
     */
    public function handle(MessageSended $event)
    {
         DoSomthing::dispatch($event);
    }
}

php artisan make:job DoSomthing



namespace App\Jobs;

use Illuminate\Bus\Queueable;
use Illuminate\Contracts\Queue\ShouldBeUnique;
use Illuminate\Contracts\Queue\ShouldQueue;
use Illuminate\Foundation\Bus\Dispatchable;
use Illuminate\Queue\InteractsWithQueue;
use Illuminate\Queue\SerializesModels;
use Illuminate\Support\Facades\Log;
use Throwable;

class DoSomthing implements ShouldQueue, ShouldBeUnique
{
    use Dispatchable, InteractsWithQueue, Queueable, SerializesModels;

    /**
     * Timeout job.
     * @var int
     */
    public int $timeout = 2000;

    /**
     * Create a new job instance.
     */
    public function __construct(public SendMessageNotification $data)
    {
        //
    }

    /**
     * Execute the job.
     */
    public function handle(): void
    {
        for ($i = 1; $i <= 10000; $i++) { Log::info(get_class($this).' success added to log: '.$i); } } /** * @param Throwable $exception * @return void */ public function failed(Throwable $exception): void { Log::error(get_class($this).' an error occurred: '.$exception->getMessage());
    }
}

Теперь в каком либо контроллере запустить событие

event(new MessageSended($user, $data));

Последний пунктом нужно на сторе фронта принять данные от пушера, на сайте пушера есть необходимые настройки для разных фрон фреймворков, пример для чистого js


            var pusher = new Pusher('key_from_pusher_com', {
                cluster: 'eu'
            });
            var channel = pusher.subscribe('name_chanel_from_laravel');
            channel.bind('name_recever_from_laravel', function(data) {
                alert(JSON.stringify(data));
            });