Я сомневаюсь в скорости и задержке показа данных в реальном времени.
Давайте предположим, что я хочу показывать пользователям данные о времени чтения с помощью ajax-запросов каждую секунду, которые получают данные из таблицы MySql простым запросом сбора данных.
Для этого в настоящее время эти два варианта бурлят в моей голове
Среди этих вариантов, которые были бы лучше? Или любое другое решение?
Как я практически проверил, если мы откроем одну страницу в браузере, то ajax-запросы дают ответ менее чем 500ms
с помощью PHP, MySql, Nginx
стек.
Но если мы откроем больше страниц, то те же самые запросы AJAX дают ответ более чем 1 second
это должно быть меньше чем 500ms
для каждого посетителя.
Таким образом, в этом случае, если количество посетителей увеличивается, то запросы ajax дают очень плохой ответ.
Я также проверил с Node.js+MySql
но результат тот же.
Это хорошо для создания json
файлы для записи и извлечения данных из файла? Или любое другое решение?
Действительно, вам нужно использовать базу данных для хранения фактических данных, но вы можете легко добавить кэш памяти (это может быть внутренний словарь или отдельный компонент) для отслеживания актуальных обновлений.
Чем ваш типичный ajax-запрос будет выглядеть примерно так:
Memcache, у нас есть что-нибудь новое для пользователя 123?
Последнее обновление было сделано 10 минут назад
ага, так что ничего нового, давайте вернем null;
Когда вы пишете данные:
Поместить данные в базу данных
Обновление времени последнего обновления для клиентов в memcache
Фактический ключ может быть другим — например, номер чата Идея состоит в том, чтобы читать базу данных только тогда, когда обновления действительно произошли.
Уровень 2:
Вы сожжете свой веб-сервер, а также клиентский интернет с большим количеством звонков. Вы можете сделать что-то:
DateTime start = DateTime.Now;
while(Now.Subtract(30 seconds) < start)
{
if (hasUpdates) return updates;
sleep(100);
}
Затем клиент будет вызывать сервер 1 раз в 30 секунд.
Клиент получит ответ немедленно, когда сервер заметит новые данные.
Других решений пока нет …