#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. Код должен быть рабочий, но мог где то что-то пропустить
Комментариев нет:
Отправить комментарий