Прежде всего, что такое веб-сокет?
Проще говоря, WebSocket — это протокол для создания быстрого двунаправленного канала между веб-браузером и сервером. Другими словами, он обеспечивает постоянное соединение между клиентом и сервером, которое обе стороны могут использовать для начала отправки данных в любое время.
Вернуться к настройке
В Rails 5 стало возможным использовать веб-сокеты, и часть этого называется Action Cable, и, как и все в Rails, она намного проще, чем где бы то ни было.
Первым требованием является обновление маршрутов с помощью этой строки.
mount ActionCable.server => '/cable'
Не знаю, заметили ли вы, но когда мы создаем наш новый API для рельсов, мы получаем папку channels под app. Здесь происходит соединение. Для создания нового канала используйте
рельсы g канал ‹channel_name›
Вот так это выглядит внутри сгенерированного канала. Потребители (на стороне клиента) подписываются на каналы, выступая в роли подписчиков. Их соединение называется подпиской. Затем созданные сообщения направляются в эти подписки на каналы на основе идентификатора, отправленного потребителем кабельного телевидения. Далее нужно добавить часть, куда будет отправлено сообщение
Другими словами, мы транслируем сообщение Потребителю всякий раз, когда происходит изменение. Я добавил это в контроллер сообщений при создании действия, поэтому всякий раз, когда создается новое сообщение, оно пересылает это сообщение обратно. Позже, как справиться с этим на переднем конце.
Во внешнем интерфейсе я мог бы использовать ванильный javascript, но, поскольку я разработчик React, я буду использовать реагирующие компоненты.
Прежде всего, установите пакет action-cable-provider в свой проект (на сегодняшний день в пакете есть ошибка, но инструктор по моду 5 предложил исправление, которое включено в эту строку кода, без вопросов!)
Затем импортируйте компонент ActionCableProvider из «react-router-dom».
Он должен обернуть раздел, который вы хотите, чтобы ваша база данных прослушивала. переданный реквизит URL состоит из 3 разделов.
Во-первых, включает «ws», что означает веб-сокет, он будет иметь специальный заголовок, который будет отправлен в базу данных для установления соединения с веб-сокетом.
Во-вторых, это ссылка на базу данных с портом.
В-третьих, это сервер ActionCable, который был добавлен в маршруты в начале, которые должны совпадать.
mount ActionCable.server => '/cable'
Теперь у нас есть провайдер, который предоставит нам соединение через веб-сокет между нашим клиентом и сервером.
Следующим шагом является добавление потребителя, который будет слушать канал и получать сообщение каждый раз, когда происходит изменение.
импортируйте ActionCableConsumer в компонент, где вы хотите прослушивать изменения, и используйте его в визуализируемой части компонента.
Проще говоря, именно здесь мы получаем все, что наша база данных передает нам. Канал — это имя класса, в котором определены методы подписки и отмены подписки для этого конкретного канала.