Laravel Websockets — это мощный пакет, который обеспечивает связь в режиме реального времени между клиентами и серверами в приложениях Laravel. Он использует протокол WebSocket для установления постоянных соединений, обеспечивая эффективный и мгновенный обмен данными. В этой статье мы рассмотрим различные методы, предоставляемые Laravel Websockets, а также примеры кода, которые помогут вам понять и реализовать функции реального времени в ваших веб-приложениях.
-
Установка и настройка:
Прежде чем углубляться в методы, давайте начнем с процесса установки и настройки Laravel Websockets. Сначала вам необходимо установить пакет с помощью Composer. Откройте терминал и выполните следующую команду:composer require beyondcode/laravel-websocketsПосле установки пакета опубликуйте файл конфигурации с помощью команды:
php artisan vendor:publish --provider="BeyondCode\LaravelWebSockets\WebSocketsServiceProvider" --tag="config"Затем вы можете настроить пакет в соответствии с вашими требованиями в файле
config/websockets.php. -
Трансляция событий.
Одной из ключевых особенностей Laravel Websockets является возможность трансляции событий множеству клиентов в режиме реального времени. Для начала определите класс событий, который расширяет классIlluminate\Foundation\Events\EventLaravel. Например, давайте создадимNewMessageEvent:namespace App\Events; use Illuminate\Foundation\Events\Event; class NewMessageEvent extends Event { public $message; public function __construct($message) { $this->message = $message; } }.
Далее вы можете инициировать это событие с помощью диспетчера событий Laravel:
event(new NewMessageEvent($message));Чтобы транслировать это событие подключенным клиентам, вам необходимо указать имя события и данные в файле
routes/channels.php:use App\Events\NewMessageEvent; use Illuminate\Support\Facades\Broadcast; Broadcast::channel('chat', function () { return true; }); Broadcast::channel('chat', function ($user) { return ['id' => $user->id]; }); Broadcast::event(NewMessageEvent::class, function ($message) { return [ 'message' => $message->message, ]; });Теперь при каждом срабатывании
NewMessageEventуказанные данные будут передаваться подписанным клиентам. -
Каналы присутствия.
Laravel Websockets также предоставляет каналы присутствия, которые позволяют отслеживать присутствие пользователей в определенном канале. Чтобы использовать каналы присутствия, вам необходимо реализовать интерфейсPresenceChannelв классе событий широковещания. Вот пример:namespace App\Events; use Illuminate\Foundation\Events\Event; use BeyondCode\LaravelWebSockets\WebSockets\Channels\PresenceChannel; use BeyondCode\LaravelWebSockets\WebSockets\Channels\Channel; class NewMessageEvent extends Event implements PresenceChannel { // ... }Каналы присутствия требуют дополнительной настройки в файле
routes/channels.phpдля авторизации пользователей:Broadcast::channel('chat', function ($user) { return ['id' => $user->id]; });Теперь вы можете транслировать события по каналам присутствия и отслеживать присутствие пользователей в режиме реального времени.
-
Реализация на стороне клиента.
Чтобы получать обновления в реальном времени на стороне клиента, вы можете использовать Laravel Echo, библиотеку JavaScript для подписки на каналы и прослушивания событий. Вот пример подписки на канал и обработки полученного события:import Echo from 'laravel-echo'; window.Echo = new Echo({ broadcaster: 'pusher', key: process.env.MIX_PUSHER_APP_KEY, cluster: process.env.MIX_PUSHER_APP_CLUSTER, // ... }); window.Echo.channel('chat') .listen('NewMessageEvent', (event) => { console.log(event.message); });Обязательно включите необходимые зависимости JavaScript и настройте экземпляр Echo, используя свои учетные данные Pusher или WebSocket.
Laravel Websockets обеспечивает простой и эффективный способ реализации функций реального времени в ваших приложениях Laravel. В этой статье мы рассмотрели некоторые ключевые методы, включая трансляцию событий, каналы присутствия и реализацию на стороне клиента с использованием Laravel Echo. Используя эти возможности, вы можете улучшить взаимодействие с пользователем и создавать интерактивные приложения с обновлениями в режиме реального времени.