Как стать автором
Обновить

Гудбай Pusher, привет Laravel Websockets

Уровень сложностиПростой
Время на прочтение2 мин
Количество просмотров9K

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

Проект делается на Laravel 10 на стартере Breeze Inertia + Vue.js.

Историю как я придумывал саму логику уведомлений я оставлю как-нибудь на потом, а вот о том как я распрощался с Pusher я расскажу сейчас. Вообще Pusher, конечно, сервис хороший, но если брать бесплатные лимиты, то там всё достаточно грустно, поэтому я решил использовать что-то другое в качестве альтернативы. Выбор пал на Laravel Websockets.

Для справки, Laravel Websockets - это такая надстройка над Laravel, которая на бэке использует Ratchet, но никаких особых настроек делать не нужно, всё работает практически "из коробки". Правда есть несколько подводных камней, о которых я тоже расскажу.

Начнем, пожалуй! И терпения нам всем.

Для начала ищем сам пакет Laravel Websockets и находим официальную документацию вот тут. Там, в целом всё просто, но, как оказалось пакет не очень-то совместим с Laravel 10. Поэтому вместо того, чтобы устанавливать как написано мы добавляем еще -w:

composer require beyondcode/laravel-websockets -w

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

Далее прописываем необходимые миграции и конфиги:

php artisan vendor:publish --provider="BeyondCode\LaravelWebSockets\WebSocketsServiceProvider" --tag="migrations"
php artisan migrate
php artisan vendor:publish --provider="BeyondCode\LaravelWebSockets\WebSocketsServiceProvider" --tag="config"

Собственно, всё. Можно настраивать.

Как известно, Laravel Websockets работает как полная замена Pusher. В настройках Laravel не нужно "химичить", достаточно прописать другой IP сервера и порт, через который будет всё работать. Порт по умолчанию используется 6001. У меня на Debian установлен UFW, собственно, разрешить 6001 порт можно простой командой:

ufw enable 6001

Теперь наш Websockets-сервер готов к использованию. Запустить его можно командой:

php artisan websockets:serve

Тут у меня возникла проблема и стали вылезать ошибки, погуглив я нашел выход из положения и обновил react/promise:

composer require react/promise:^2.3

Все ошибки сразу ушли, сервер ловит подключения, отключения, события. Если нам надо, чтобы сервер работал постоянно, даже когда мы не в консоли, для этого можно использовать пакет Supervisor. Установить его можно вот так:

# Для Debian / Ubuntu
apt install supervisor

# Для Red Hat / CentOS
yum install supervisor
systemctl enable supervisord

После чего делаем следующее:

cd /etc/supervisor/conf.d
touch websockets.conf

Содержание файла websockets.conf достаточно банальное, поменяйте пути и имя пользователя на те, которые используете:

[program:websockets]
command=/usr/bin/php /home/path-to-laravel-echo-install/artisan websockets:serve
numprocs=1
autostart=true
autorestart=true
user=username

Далее сохраняем файл, и вводим две команды:

supervisorctl update
supervisorctl start websockets

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

Вот примерно так я установил Laravel Websockets. Как я подключал Vue-приложение и с какими проблемами столкнулся, я расскажу в следующей статье.

Спасибо за внимание!

Теги:
Хабы:
Всего голосов 9: ↑9 и ↓0+9
Комментарии6

Публикации

Истории

Работа

Ближайшие события

19 марта – 28 апреля
Экспедиция «Рэйдикс»
Нижний НовгородЕкатеринбургНовосибирскВладивостокИжевскКазаньТюменьУфаИркутскЧелябинскСамараХабаровскКрасноярскОмск
24 апреля
VK Go Meetup 2025
Санкт-ПетербургОнлайн
25 – 26 апреля
IT-конференция Merge Tatarstan 2025
Казань
14 мая
LinkMeetup
Москва
5 июня
Конференция TechRec AI&HR 2025
МоскваОнлайн
20 – 22 июня
Летняя айти-тусовка Summer Merge
Ульяновская область