Laravel pusher не работает

Обратный вызов прослушивания не работает в Pusher API Laravel 5.4

Проблема

Я могу подтвердить, что Pusher API получает сообщение. Я видел в консоли отладки веб-сайта Pusher. Но обратный вызов прослушивания не работает вообще.

Ниже приведены пошаговые инструкции.

    composer require pusher/pusher-php-server литий> npm install —save laravel-echo pusher-js литий>
  1. создает экземпляр Echo в вашем resources/assets/js/bootstrap.js
  2. Инициализировал ключ толкателя в env и в bootstrap.js файл.

Наконец, я написал код ниже в блейде.

Код контроллера

Код события

Я что-то упустил?

3 ответа

  1. Вы должны слушать: SendMessageEvent без пространства имен.
  2. когда вы слушаете частный канал, вам нужно прослушать private-SendmessageChannel или использовать Echo.private(‘SendmessageChannel’)

Так как в некоторых частях мы исправили проблему с помощью teampeak, трудно объяснить ее в этом ответе во всех деталях.

Одной из проблем было то, что событие было запущено до того, как клиент начал его слушать. Лучший способ — отладка с помощью консоли-толкателя и запуск пользовательских событий.

Я использую события Laravel 5.4 довольно эффективно с 6 месяцев с проектом. У меня была такая же проблема, когда я делал начальную настройку. Позвольте мне рассказать вам обо всем, что я сделал, чтобы он работал.

Я вижу, у вас есть controller для инициирования события, SendMessageEvent для отправки содержимого сообщения в pusherjs. Вам нужно проверить следующее, чтобы начать работу.

Проверка 1:

Но вы не упомянули, есть ли у вас определенный Eventhandler. Обработчик событий работает как мост между SendMessageEvent и его действительным вещателем. Итак, определите Eventhandler, создайте одну папку, например, app / Handlers / Events / . (здесь Обработчики и События — это папки. Где События находятся внутри Обработчиков)

создайте один файл внутри этой папки событий с именем, например.

HandleMyMessage.php И вставьте в него этот код:

Проверка 2: В app / Providers / EventServiceProvider.php должен быть один провайдер, и в EventServiceProvider.php

Проверка 3: И вы должны изменить синтаксис отправки сообщения о событии в вашем контроллере следующим образом:

Более того, вам также нужно установить Redis в вашей системе и запустить его.

Надеюсь, это поможет. Если вам нужна дополнительная информация по любому из вышеперечисленных вопросов, просто оставьте комментарий. Я публикую ссылочную ссылку на то же самое.

Я получил это работает. Ниже приведен правильный код. Я надеюсь, что это будет полезно другим для отправки сообщений в режиме реального времени.

Источник

Laravel по-русски

Русское сообщество разработки на PHP-фреймворке Laravel.

#1 14.09.2020 18:16:01

Laravel + pusher не работает на рабочем сервере

Версия Laravel — 8.1.0

Локальный сервер:
OC Windows
XAMMP 7.4.8
PHP 7.4.8

Рабочий сервер
ОС Linux Centos 7
PHP 7.4.8

Добрый вечер.
Настроил отправку push уведомлений по данной инструкции https://www.tutofox.com/laravel/laravel … ts-pusher/
.env

app/config/broadcasting.php

app/Events/Notifications.php

Команда вызывающая событие

На локальном сервере всё отрабатывает нормально, а вот на продакшене все сообщения записываются в лог файлы

Google и Яндекс уже перерыл. Помогите, пож-та, разобраться

Изменено Vladimir_user (14.09.2020 18:18:33)

Не в сети 21.12.2016

#2 15.09.2020 20:09:57

Re: Laravel + pusher не работает на рабочем сервере

Ещё заметил, что время указанное в логах на продакшене на 2 часа меньше, чем серверное. Даже пробовал менять время на сервере — время в логах всё равно на 2 часа меняется в меньшую сторону

Не в сети 21.12.2016

#3 16.09.2020 08:04:35

Re: Laravel + pusher не работает на рабочем сервере

Я бы дважды проверил .env на продакшене. Кроме того, сделал бы php artisan config:clear и php artisan cache:clear

Про время: проверь часовой пояс. просто вызови в консоли date

Читайте также:  Reshade не работает клавиатура

There are two hard things in computer science: cache invalidation, naming things, and off-by-one errors.

Не в сети 21.11.2017

#4 16.09.2020 11:43:37

Re: Laravel + pusher не работает на рабочем сервере

Спасибо за ответ.

Я бы дважды проверил .env на продакшене

Я уже 3-ё суток его перепроверяю)))
Пробовал разные комбинации.
Также в файле app/config/broadcasting.php прописывал ключи вручную — не помогло.

Запускал на локалке и сервере команды

Также заметил особенность. Если на локалке в файле .env указать не верный ключ, то при вызове события выдаёт исключение

Если тоже самое сделать на продакшене, то ошибок не выдаёт. Такое ощущение, что на продакшене вообще игнорируется файл app/config/broadcasting.php и сразу все сообщения пишет в log файл.

Кроме того, сделал бы php artisan config:clear и php artisan cache:clear

Запускал и не раз))) Также чистил всё что только можно очистить с помощью команд

Источник

Обратный вызов прослушивания не работает в Pusher API Laravel 5.4

Я могу подтвердить, что Pusher API получает сообщение. Я видел в консоли Debug веб-сайта Pusher. Но обратный вызов прослушивания не работает вообще.

Ниже были сделаны пошаговые действия.

  1. composer require pusher/pusher-php-server
  2. npm install —save laravel-echo pusher-js
  3. создать экземпляр Echo в вашем resources/assets/js/bootstrap.js
  4. Инициализировал ключ толкателя в env и в bootstrap.js файле.

Наконец, я написал ниже код в Blade.

Код контроллера

Код события

Я что-то упустил?

3 ответа

  1. Вы должны слушать: SendMessageEvent без пространства имен.
  2. когда вы слушаете частный канал, вам нужно прослушать private-SendmessageChannel или вы используете Echo.private(‘SendmessageChannel’)

Поскольку в некоторых частях мы исправили проблему с помощью teampeak, объяснить ее в этом ответе довольно подробно.

Одной из проблем было также то, что событие было запущено до того, как клиент начал его слушать. Лучший способ — это отладка с помощью консоли-толкателя и запуск пользовательских событий.

Я получил это работает. Ниже приведен правильный код. Я надеюсь, что это будет полезно другим для отправки сообщений в режиме реального времени.

Js Work

Код контроллера

Код события

Я использую события Laravel 5.4 довольно эффективно с 6 месяцев с проектом. У меня были те же проблемы, когда я делал начальную настройку. Позвольте мне рассказать вам обо всем, что я сделал, чтобы все заработало.

Я вижу, у вас есть controller для инициации события, SendMessageEvent для отправки содержимого сообщения в pusherjs. Вы должны проверить следующие вещи, чтобы начать.

Проверьте 1:

Но вы не упомянули, если у вас есть определенный Eventhandler. Обработчик событий работает как мост между SendMessageEvent и его действительным вещателем. Итак, определите Eventhandler, создайте одну папку как app / Handlers / Events / . (здесь Обработчики и События — это папки. Где События находятся внутри Обработчиков)

Создайте один файл внутри этой папки событий с именем, например,

HandleMyMessage.php И поместите в него этот код:

Проверка 2: В app / Providers / EventServiceProvider.php должен быть один провайдер, и в EventServiceProvider.php следует поместить следующий код

Проверьте 3 . И вы должны изменить синтаксис отправки сообщения о событии в вашем контроллере следующим образом:

Более того, вам также нужно установить Redis в вашей системе и запустить его.

Надеюсь это поможет. Если вам нужна дополнительная информация по любому из вышеперечисленных вопросов, просто прокомментируйте. Я публикую ссылку для ссылки на то же самое.

Источник

Как добавить уведомления в реальном времени в Laravel с помощью Pusher

Перевод статьи подготовлен специально для студентов курса «Framework Laravel».

Современный веб-пользователь ожидает быть информированным обо всем, что происходит в приложении. Вы бы не хотели быть тем веб-сайтом, у которого нет хотя бы раскрывающегося списка уведомлений, который теперь можно найти не только на всех сайтах социальных сетей, но и вообще повсюду в наши дни.

К счастью, с Laravel и Pusher реализация этого функционала довольно проста.

Уведомления в реальном времени

Для того, чтобы обеспечить положительный пользовательский опыт, уведомления должны отображаться в режиме реального времени. Одним из подходов является регулярная отправка AJAX-запроса на сервер и получение новейших уведомлений, если таковые существуют.

Лучшим подходом является использование возможностей WebSockets и получение уведомлений в момент их отправки. Это именно то, что мы собираемся реализовать в этой статье.

Читайте также:  Ассасин крид 2 как настроить управление геймпада

Pusher

Pusher — это веб-сервис для интеграции двунаправленной функциональности в реальном времени через WebSockets в веб и мобильные приложения.

У него очень простой API, но мы собираемся сделать его использование еще проще с Laravel Broadcasting и Laravel Echo.

В этой статье мы собираемся добавить уведомления в реальном времени в уже существующий блог.

Проект

Инициализация

Сначала мы клонируем простой блог Laravel:

Затем мы создадим базу данных MySQL и настроим переменные среды, чтобы предоставить приложению доступ к базе данных.

Давайте скопируем env.example в .env и обновим переменные, связанные с базой данных.

Теперь давайте установим зависимости проекта с помощью

И запустим команду миграции и заполнения, чтобы заполнить базу данных какими-нибудь данными:

Если вы запустите приложение и зайдите в /posts , вы сможете увидеть список сгенерированных постов.

Проверьте приложение, зарегистрируйте пользователя и создайте несколько сообщений. Это очень простое приложение, но оно отлично подходит для демонстрации.

Подписка на пользователей

Мы хотели бы дать пользователям возможность подписываться друг на друга, поэтому мы должны создать отношение «многие ко многим» между пользователями, чтобы это реализовать.

Давайте создадим сводную таблицу, которая связывает пользователей с пользователями. Сделаем новую миграцию followers :

Нам нужно добавить несколько полей к этой миграции: user_id для представления пользователя, который подписан, и поле follows_id для представления пользователя, на которого подписались.

Обновите миграцию следующим образом:

Теперь перейдем к созданию таблицы:

Давайте добавим методы отношений в модель User .

Теперь, когда модель User имеет необходимые отношения, followers возвращает всех подписчиков пользователя, а follows возвращает всех, на кого подписан сам пользователь.

Нам понадобятся некоторые вспомогательные функции, позволяющие пользователю подписываться на других пользователей — follow , и проверять, подписан ли пользователь на какого-нибудь конкретного пользователя — isFollowing .

Отлично. После подготовки модели нужно составить список пользователей.

Список пользователей

Давайте начнем с определения необходимых маршрутов

Затем пришло время создать новый контроллер для пользователей:

Мы добавим к нему метод index :

Метод нуждается в представлении. Давайте создадим представление users.index и поместим в него следующую разметку:

Теперь вы можете посетить страницу /users , чтобы увидеть список пользователей.

Follow и Unfollow

В UsersController отсутствуют методы follow и unfollow . Давайте реализуем их, чтобы завершить эту часть.

С этим функционалом мы закончили. Теперь мы можем подписываться на пользователей и отписываться от них на странице /users .

Уведомления

Laravel предоставляет API для отправки уведомлений по нескольким каналам. Электронная почта, SMS, веб-уведомления и любые другие типы уведомлений могут быть отправлены с помощью класса Notification.

У нас будет два типа уведомлений:

  • Уведомление о подписке: отправляется пользователю, когда на него подписывается другой пользователь
  • Уведомление о посте: отправляется подписчикам данного пользователя при публикации нового поста.

Уведомление о подписке

Используя artisan-команды, мы можем сгенерировать миграцию для уведомлений:

Давайте выполним миграцию и создадим эту таблицу.

Мы начнем с уведомлений о подписке. Давайте выполним эту команду для создания класса уведомлений:

Затем мы модифицируем файл класса уведомлений, который мы только что создали:

С помощью этих нескольких строк кода мы уже можем достичь многого. Сначала мы требуем, чтобы экземпляр $follower был внедрен при создании этого уведомления.

Используя метод via , мы говорим Laravel отправить это уведомление через канал database . Когда Laravel сталкивается с этим, он создает новую запись в таблице уведомлений.

user_id и type уведомления устанавливаются автоматически, плюс мы можем расширить уведомление дополнительными данными. Вот для чего предназначен toDatabase . Возвращаемый массив будет добавлен в поле data уведомления.

И, наконец, благодаря реализации ShouldQueue , Laravel автоматически поместит это уведомление в очередь, которая будет выполняться в фоновом режиме, что ускорит ответ. Это имеет смысл, потому что мы будем добавлять HTTP-вызовы, когда будем использовать Pusher позже.

Давайте реализуем уведомление о подписке на пользователя.

Мы можем вызвать метод notify для модели User, потому что она уже использует черту Notifiable.

Любая модель, которую вы хотите уведомить, должна использовать ее для получения доступа к методу notify.

Отмечаем уведомление как прочитанное

Уведомления будут содержать некоторую информацию и ссылку на ресурс. Например: когда пользователь получает уведомление о новом сообщении, уведомление должно содержать информативный текст, перенаправлять пользователя на сообщение при нажатии и помечаться как прочитанное.

Читайте также:  Как сделать настроить фокус у камеры виндовс 10

Мы собираемся создать прослойку, которая будет проверять, есть ли в запросе вхождение ?read=notification_id и помечает его как прочитанное.

Давайте сделаем эту прослойку с помощью следующей команды:

Затем давайте поместим этот код в метод handle прослойки:

Для того, чтобы наша прослойка выполнялась для каждого запроса, мы добавим ее в $middlewareGroups .

После этого давайте займемся отображением уведомлений.

Отображение уведомлений

Мы должны показать список уведомлений, используя AJAX, а затем обновить его в режиме реального времени с помощью Pusher. Во-первых, давайте добавим метод notifications в контроллер:

Этот код вернет последние 5 непрочитанных уведомлений. Нам просто нужно добавить маршрут, чтобы сделать его доступным.

Теперь добавим выпадающий список для уведомлений в шапке.

Мы также добавили глобальную переменную window.Laravel.userId в скрипт, чтобы получить ID текущего пользователя.

JavaScript и SASS

Мы собираемся использовать Laravel Mix для компиляции JavaScript и SASS. Во-первых, нам нужно установить npm-пакеты.

Теперь давайте добавим этот код в app.js :

Это всего лишь инициализация. Мы собираемся использовать notifications для хранения всех объектов уведомлений, независимо от того, извлекаются ли они через AJAX или Pusher.

Как вы, наверное, уже догадались, NOTIFICATION_TYPES содержит типы уведомлений.

Теперь давайте получим (“GET”) уведомления через AJAX.

Благодаря этому коду мы получаем последние уведомления от нашего API и помещаем их в раскрывающийся список.

Внутри addNotifications мы объединяем имеющиеся уведомления с новыми, используя Lodash, и берем только последние 5, которые и будут показаны.

Нам нужно еще несколько функций, чтобы закончить работу.

Эта функция создает строку всех уведомлений и помещает ее в раскрывающийся список.
Если не было получено ни одного уведомления, отображается просто «Нет уведомлений».

Она также добавляет класс к выпадающей кнопке, которая просто изменит свой цвет при наличии уведомлений. Немного напоминает уведомления на Github.

Наконец, некоторые вспомогательные функции для создания строк уведомлений.

Теперь мы просто добавим это в наш файл app.scss :

Давайте скомпилируем ассеты:

Теперь если вы попытаетесь подписаться на пользователя, он получит уведомление. Когда он кликнет по нему, он будет перенаправлен в /users , а само уведомление исчезает.

Уведомление о новом посте

Мы собираемся уведомлять подписчиков, когда пользователь публикует новый пост.

Начнем с создания класса уведомлений.

Давайте модифицируем сгенерированный класс следующим образом:

Далее нам нужно отправить уведомление. Есть несколько способов сделать это.

Мне нравится использовать наблюдатели Eloquent.

Давайте создадим наблюдателя за Post и будем слушать его события. Мы создадим новый класс: app/Observers/PostObserver.php

Затем зарегистрируем наблюдателя в AppServiceProvider :

Теперь нам просто нужно отформатировать сообщение для отображения в JS:

И вуаля! Пользователи получают уведомления о подписках и новых постах! Попробуйте сами!

Выходим в режим реального времени с Pusher

Пришло время использовать Pusher для получения уведомлений в режиме реального времени через веб-сокеты.

Зарегистрируйте бесплатную учетную запись Pusher на pusher.com и создайте новое приложение.

Задайте параметры своей учетной записи в файле конфигурации broadcasting :

Затем мы зарегистрируем App\Providers\BroadcastServiceProvider в массиве providers .

Теперь мы должны установить PHP SDK и Laravel Echo от Pusher:

Нам нужно настроить данные уведомлений для трансляции. Давайте модифицируем уведомление UserFollowed :

Последнее, что нам нужно сделать, это обновить наш JS. Откройте app.js и добавьте следующий код

И на этом все. Уведомления добавляются в режиме реального времени. Теперь вы можете поиграть с приложением и посмотреть, как обновляются уведомления.

Вывод

У Pusher очень удобный API, который делает реализацию событий в реальном времени невероятно простой. В сочетании с уведомлениями Laravel мы можем отправлять уведомления по нескольким каналам (электронная почта, SMS, Slack и т. д.) из одного места. В этом руководстве мы добавили функциональные возможности для отслеживания активности пользователей в простой блог и усовершенствовали его с помощью вышеупомянутых инструментов, чтобы получить некоторый плавный функционал в реальном времени.

У Pusher и Laravel есть гораздо больше уведомлений: в тандеме сервисы позволяют отправлять pub/sub-сообщения в режиме реального времени на браузеры, мобильные телефоны и IOT-устройства. Существует также API для получения online/offline статуса пользователей.

Пожалуйста, ознакомьтесь с их документацией (Pusher docs, Pusher tutorials, Laravel docs), чтобы узнать более подробную информацию о их использовании и истинном потенциале.

Если у вас есть какие-либо комментарии, вопросы или рекомендации, не стесняйтесь делиться ими в комментариях ниже!

Источник

Оцените статью