Laravel realtime data?

Доброй ночи! Есть задача показывать большое кол-во данных из базы. Есть N пользователей, которые могут изменять цену в уже существующего в системе продукта. Чем меньше цена, тем выше в списке поднимаеться товар с ценой конкретного пользователя, относительно тех же товаров с большей ценой, других пользователей.
Каждый раз как 1 пользователь обновил цену - эта информация должна обновиться у всех пользователей.

Я вижу это так, человек выбралд товар и добавил цену. Если этому товару впервые присвоена цена от конкретного пользователя. То я беру запись в базе, котороя относиться к этому пользователю и с помощью веб сокетов, отправляю ее всем пользователям. Кладу ее в html5 storage, потом беру все данные, которые уже есть в storage и изменяю их, потом обновляю html.

Другой вариант, генерировать partial view на сервре и отправлять его всем пользователям. Делать это каждые 2-5 секнды, использую setInterval на стороне клиента. Но тогда нагрузка на сервер будет во много раз больше. Да и опрашивать сервер с клиента, через заданный интервал времени, скорее всего не очень хорошая идея.

Штука в том, что у всех пользователей, информация должна обновляться одновременно. И как такое делали раньше, до того как появилась возможность, хранить все на стороне клиента в браузере? И правильно ли это, хранить данные на клиенте,а по необходимости, просто дополнять их или удалять. Может быть, есть другие методики, благодаря которым я могу все отфильтровать, сортировать на сервере и отправить все эти данные клиенту, а там просто отрисовать все это дело? Ну и веб сокеты не очень подойдут, для отправки больших сообщений, да тот же пушер, имеет ограничение в 10КБ для одного сообщения.

Подскажите пожалуйста, как правильнее всего это дело реализовать? Спасибо!
  • Вопрос задан
  • 276 просмотров
Пригласить эксперта
Ответы на вопрос 2
AmdY
@AmdY
PHP и прочие вебштучки
В сокет вы можете посылать просто событие с плейлодом {action: "UpdatePrice", payload: {ids: [1, 2,3]}}
А на основании этого события система будет знать что надо сходить на сервер за новыми ценами и делать это обычным ajaj запросом, выбирая все данные или только обновлённые.
Ответ написан
@Insayt
Ваша задача решается просто:
- Клиент обновил цену
- Записали новое значение в базу, всем остальным клиентам послали сокет с данными:
{
id_товара: новая_цена
}

- Когда браузер получил сообщение в сокет - через js обновили значение цены в нужном HTML элементе
- Таким образом после изменения цены в базе, у всех клиентов сразу отрисуется новое значение
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы