Как сделать динамическое обновление контекта, запрашиваемого через JSON?

Постановка: JSON'ом передается информация с сервера, необходимо сделать динамическое обновление этой информации при изменении файла на сервере.



Решил с помощью setTimeout и рекурсии функции, которая делает getJSON. Но, мне кажется, есть какое-то другое, более правильное/удобное решение. Это решение, во-первых, делает большую нагрузку на сервер, во-вторых, по прошествия некоторого времени, почему-то перестает обновлять данные.



Интересует как осуществить это правильней? И как похожие вещи сделаны в том же ВКонтакте (получение сообщений, комментарии), GMail и так далее?
  • Вопрос задан
  • 4688 просмотров
Пригласить эксперта
Ответы на вопрос 6
serso
@serso
Смотрите в сторону Comet
Ответ написан
Комментировать
@egorinsk
Вконтакте используется какая-то бибилиотека для веб-сокетов, а на серверах наверно стоит сишный (или не сишный?) демон, специально написанный для этой цели. Если сможете повторить такую конструкцию, будем рады видеть вашу статью с описанием на Хабре.
Ответ написан
Keenest
@Keenest
Решил с помощью setTimeout и рекурсии функции, которая делает getJSON.

Рекурсия-то там зачем?..

Интересует как осуществить это правильней? И как похожие вещи сделаны в том же ВКонтакте (получение сообщений, комментарии), GMail и так далее?

Как правильно уже сказали, лучше через websocket.
Вот например была статья хорошая: habrahabr.ru/post/127525/
Ответ написан
Комментировать
colonel
@colonel
Разработчик PHP, Laravel
Если интересует, как это сделано на других, поковыряйте сами глубже.
Например, просто, через тот же firebug (вкладка Net) вы увидите, опрашивают
ли сами клиенты сервер.
Если нет, — значит где-то на клиенте открыт слушающий сокет, куда может
обращаться сервер.

Я бы начал с этого именно.
Ответ написан
Комментировать
unconnected
@unconnected
setTimeout валится из-за необработанной ошибки.
Использовать setInterval тоже нужно осторожно, была реальная ситуация, когда при неактивной вкладке браузера setInterval начинал накапливаться (т.е. не выполнялся, а складывался в какую-то очередь), а потом при открытие вкладки выполнял все, что накопилось.
Комета — тоже нужно хорошо подумать, т.к. это постоянное подключение к серверу и дополнительные скрипты на сервер-сайде. Использовать его нужно только там, где она оправдано (да и без setTimeout все-равно не обойдетесь).
Ответ написан
@vesel4ak
попробуйте смотреть в сторону web-socket
Ответ написан
Комментировать
Ваш ответ на вопрос

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

Похожие вопросы