0 / 0 / 0
Регистрация: 10.08.2017
Сообщений: 35
|
||||||
1 | ||||||
Laravel broadcast. Прослушка событий на стороне бека18.03.2024, 14:50. Показов 479. Ответов 4
В laravel есть встроенный функционал broadcast, трансляция событий в ws сервер. Есть большая статься на сайте лары, где описывается удобный функционал трансляции событий. Описан пакет Laravel Echo, который позваляет удобно читать эти события на фронте.
Однако у меня возникла необходимость делать наоборот. Фронт отправляет сообщения в ws сервер, а бек должен читать эти сообщения. И вот функционала прослушки сообщений в laravel имено на стороне бека нет вообще, почему-то. В результате долгих поисков решения было сделано следующее: Я использовал пакет beyondcode/laravel-websockets, который в свою очередь под капотом использует достаточно не простой пакет ratchet. В доке ratchet приводится пример класса, который должен реализовывать интерфейс MessageComponentInterface
Есть ли какой-то более изящный способ реализовать подобный функционал, используя набор фич laravel? В laravel 10 был презентован некий laravel reverb, который так же позволяет развернуть ws-сервер, а так же достаточно легко обходит ограничение в 1024 коннекта, что мне понравилось. Но опять же, нигде, ни слова про возможность прослушки сообщений на стороне бека.
0
|
18.03.2024, 14:50 | |
Ответы с готовыми решениями:
4
ServiceWorker прослушка событий на странице Построить треугольник по стороне, противолежащему стороне углу и радиусу вписанной окружности Клиент/сервер, как установить библиотеки на стороне клиента и на стороне сервера? Долго выполняется процесс на стороне сервера. ProgressBar на стороне клиента Составить программу для построения ромба по стороне, высоте, стороне и углу, диагоналям |
31 / 25 / 11
Регистрация: 16.06.2020
Сообщений: 150
|
|
19.03.2024, 18:54 | 2 |
А чем не устраивает обычный контроллер?
Зачем для этого вообще websocket использовать? Они же для другого предназначены.
0
|
0 / 0 / 0
Регистрация: 10.08.2017
Сообщений: 35
|
|
20.03.2024, 12:14 [ТС] | 3 |
На сайте есть видео. Есть необходимость проверять какая часть видео была просмотрена, а так же отлавливать событие того, когда пользователь закончил смотреть видео.
Для этого было решено сделать ws сервер. Фронт отправляет каждые 5 секунд в ws сервер сообщение о том, на какой секунде просмотра находится пользователь, и с какой скоростью он смотрит видео. Когда пользователь закончил просмотр видео все собранные данные анализируются и формируются конкретные кусочки, которые были просмотрены пользователем. Естественно есть погрешность, но она допустима. Если использовать обычные http запросы, то есть риск задудосить самого себя. А так же остается проблема с тем чтобы определить когда пользователь закончил просмотр видео, и когда следует произвести анализ полученных данных. Например, если пользователь просто закроет вкладку во время просмотра, я никак не смогу это отследить, а с помощью ws сервера я могу отлавливать закрытие ws соединения. Даже если пользователь просто выключит комп во время просмотра, я все равно смогу отловить разрыв ws соединения и обработать те данные что успел собрать.
0
|
31 / 25 / 11
Регистрация: 16.06.2020
Сообщений: 150
|
|
22.03.2024, 22:31 | 4 |
С чего это? Если ваш обработчик не будет дико тяжелым и тормозным, то никакого риска нет.
Ну во первых событие закрытие вкладки браузера (onbeforeunload) можно использовать. А если комп выключат (или сеть отвалится) вы на сервере всё равно, даже при использовании ws, сразу об этом не узнаете. А узнаете только когда когда таймаут tcp истечет (по умолчанию это, кажется, 2 мин) и сокет отвалится. Не проще ли просто каждую минуту вызывать обычным http событие что видео было просмотрено: 1, 2, 3 …. минуты, а потом анализировать, до какого момента досмотрели? Добавлено через 1 час 8 минут Просто веб-сокеты используют именно для доставки событий от сервера, к браузеру. Хотя, конечно технически на низком уровне, по открытому tcp соединению можно гонять данные в обе стороны… Но для запросов с браузера на сервер используется традиционный http, поэтому этот функционал там не реализован.
1
|
0 / 0 / 0
Регистрация: 10.08.2017
Сообщений: 35
|
|
25.03.2024, 16:19 [ТС] | 5 |
Сейчас сообщение отправляется каждые 5 секунд. При отправки каждую минуту будет слишком большая погрешность в измерениях. Многие перематывают видосы туда сюда, просматриват их по несколько раз. Кто-то просто жмет стрелочку вперед чуть ли не каждые пару секунд. Так же в плеере есть возможность просматривать видос на разных скоростях и тд. Кейсов много и отправка запроса каждую минуту даст не просто "грязные данные", а даже вообще не корректные.
Сейчас этот обработчик быстрый, все сообщения, отправляемые каждые 5 секунд пишутся в редис без какой либо обработки. А вот уже после просмотра видео, когда происходит дисконект от ws сервера происходит обработка данных. То есть дисконнект, это своего рода триггер, обозначающий то, что пользователь закончил смотреть видео. И тогда я беру данные из кэша и начинаю их обрабатывать, и вот этот процесс уже не самый быстрый. Если отказаться от ws, то встает вопрос о том, как тригреить окончание просмотра видео, чтобы произвести анализ полученных данных. А если анализировать данные сразу, при каждом http запросе, который еще и будет отправляться каждые 5 секунд, это будет так себе. Вот тут я боюсь, что нагрузка возрастет значительно.
0
|
25.03.2024, 16:19 | |
25.03.2024, 16:19 | |
Помогаю со студенческими работами здесь
5
Отсечение Кируса-Бека Алгоритм Кирусе-Бека Алгоритм Кируса-Бека на Делфи Двумерный алгоритм Кируса-Бека Запись массива с бека на фронт Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |