Страницы

Поиск по вопросам

суббота, 7 декабря 2019 г.

Уведомления пользователю в реальном времени. Laravel 5.3

#php #nodejs #laravel #websocket #redis


Возникла необходимость уведомлять юзера о событиях в системе в реальном времени. 

Используется как основа laravel 5.3. Но как правильно это организовать и что для
этого необходимо не знаю. Подскажите как правильно построить подобную систему. Возможно
я смотрю не в ту сторону но все что я пока что нашел это Events в laravel

2 типа уведомлений:


Письма
Сообщение на фронте в виде окна с текстом.

    


Ответы

Ответ 1



В двух словах абстрагировано, добавляете методы которые проверяют информацию при появлении которой нужно выдать уведомление. К примеру public function newMessage() { // проверяем... //если есть новое setcookie("newMessage", $count, time() + 86400); return 'yes'; //если нет return 'no'; } Добавляем маршрут к этому методу. На фронте c помощью ajax слушайте эти куки. Как то так...

Ответ 2



Делал себе что-то подобное, реализовал следующим образом: Уведомления Email, SMS и т.п. лучше всего сделать через новую возможность, которая появилась в версии 5.3: Laravel Notifications Если в будущем захотите не только Email уведомление ознакомьтесь с сайтом - http://laravel-notification-channels.com/ там есть много каналов для уведомлений. Уведомления в браузере лучше всего тоже реализовать через новую фичу версии 5.3: Event Broadcasting Начнем с того что выберем драйвер для Event Broadcasting, я покажу на примере Pusher. Для начала внесем изменения в файл .env: BROADCAST_DRIVER=pusher PUSHER_APP_ID=#данные с панели Pusher PUSHER_KEY=#данные с панели Pusher PUSHER_SECRET=#данные с панели Pusher Загрузим пакет через Composer: composer require pusher/pusher-php-server Пока с Pusher всё, в конце вернемся к нему ещё раз. Создаем событие, (примеры и описание есть тут) к примеру мы будем отправлять уведомление когда кто-то пишет пользователю. Объект уведомления будет выглядеть примерно так: user = $user; $this->data = $data; } /** * Get the channels the event should broadcast on. * * @return Channel|array */ public function broadcastOn() { return ['chat-channel']; } public function broadcastAs() { return 'message-received'; } } Методы broadcastOn и broadcastAs нужны для Event Broadcasting, так же надо создать Listener для этого события чтобы в нём отправлять Email сообщение и прочие. Теперь необходимо создать Mail Notification в котором укажем шаблон письма, пример доступен по ссылке, назовем его к примеру MessageSend. Далее нужно создать Listener который будет вызывать это уведомление: user->notify(new MessageSend($event->data)); } } Теперь файле EventServiceProvider привяжем событие и слушатель: protected $listen = [ 'App\Events\ChatMessageSend' => [ 'App\Listeners\SendChatMessageNotification', ], ]; Теперь всё готово для отправки уведомлений. Чтобы отправить уведомление нужно вызвать событие: event(new ChatMessageSend($user, $data)); Письмо на почту ушло, и ушло на сервис Pusher, но теперь надо его вывести в браузере, на сайте Pusher есть примеры для разных языков, я выведу для JS: Pusher Test Вместо alert пишите свой JS для уведомлений в браузере. P.S. Код должен быть рабочий, но мог где то что-то пропустить

Комментариев нет:

Отправить комментарий