Украина, Днепр
(095) 478-70-11
Слздаем аккаунт и апку на 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)); });
Copyright © 2012-2025 All rights reserved.
created by WPS.