Как правильно реализовать обновление динамических данных в RealTime?
Доброго времени суток.
Задача: Выводить на страницу данные из БД и обновлять их в реальном времени без перезагрузки страницы, по инициативе сервера.
Мое решение: Сейчас при загрузке страницы я делаю Ajax запрос к серверу и выдаю данные на страницу через JS. Данными является массив строк из БД. На сервер есть демон, который проводит мониторинг данных, обновляет информацию в БД и вызывает через Comet сервер JS функцию в браузере пользователя на нашей странице. Функция обращается через Ajax к контроллеру который используется при загрузке страницы и обновляет данные на странице.
Проблема: В контроллере для получения данных из БД я использую PHP, тут же находится весь HTML код, который передается Ajax`ом на страницу. Мне нужно сделать вывод информации при загрузке страницы с помощью PHP, а обновлять уже Ajax`ом, но возникает проблема дублирования HTML кода, непосредственно на самой странице и в контроллере и при любом обновление структуры HTML придется делать правку в обоих местах.
Вопрос: Как правильно реализовать мою задачу, что бы не пришлось дублировать HTML код?
Примечание: Данные на странице необходимо обновлять все сразу, потому как из-за обновления всего одной строки в БД, может измениться вся сортировка выдачи. Поэтому варианты обновления только тех элементов, которые были затронуты мне не подходит.
Проблема заключалась в моей невнимательности, решается все просто: при загрузке странице данные синхронно загружает контроллер, который используется для асинхронного обновления через Ajax. Всем спасибо и продуктивного вечера. :-)
1) на сервере крутится демон который собирает всю эту статистику и позволяет отдавать ее по изменениям.
2) клиенты коннектятся к серверу через websockets/long poling и таким образом получают актуальные данные. То есть не просто "скажи клиентам что бы обновили данные" а посылать сразу данные.
3) передаваться должны только данные, рендриться пусть все на клиенте. Это решает проблему с сортировкой - ее можно делать и на клиенте.
В итоге я снова получу дублирование html кода, но теперь непосредственно на странице и в JS коде. Мне необходимо при изначальной загрузке страницы вывести данные синхронно с помощью PHP, так как через Ajax данные поступают с задержкой, которую необходимо ликвидировать.
Сергей Протько: Сейчас происходит тоже самое, только рендрингом занимается сервер, но такой метод вызывает задержку при выдаче данных на странице. Выходит, что страница уже открылась, все содержимое показано, но нет данных о которых идет речь и только через 1-2 секунду они подгружаются. Вот от этого я пытаюсь избавиться.