Я заметил, что некоторые из моих ajax-сайтов (те, которые я посещаю, а не те, которые я построил), имеют определенные функции автоматического обновления. Например, в GMail, если я получаю новое сообщение, я вижу новое сообщение без перезагрузки страницы. То же самое и с IM-клиентом на базе браузера Facebook. Из того, что я могу сказать, нет никаких java-апплетов, обрабатывающих привязку сервер-браузер, так что я могу предположить, что это делает AJAX и, возможно, какой-то элемент, о котором я не знаю. Так что, по моему мнению, это делается одним из двух способов:
javascript выполняет постоянный «пинг» сценария на стороне сервера, проверяя наличие любых доступных обновлений (что объясняет, почему некоторые из этих страниц приводят к сканированию любых других сверхмощных страниц). или
Javascript бездействует, а серверный скрипт фактически «выталкивает» любые обновления в браузер. Но я не уверен, возможно ли это. Я предполагаю, что есть какая-то функция AJAX, которая все еще пингует, но все это просто запрашивает "какие-либо обновления?" а серверный скрипт имеет простое логическое значение, которое говорит «Нет» или «Я рад, что вы спросили». Но если это так, любые изменения данных должны вызывать скрипт напрямую, чтобы он был готов к изменениям данных и вносил изменения в эту булеву функцию.
Так это возможно / осуществимо / как это работает? Я представляю что-то вроде:
Кто-то отправляет на сервер обновление электронной почты / IM / DB, сервер вызывает сценарий, используя URL-адрес сценария плюс некоторую соответствующую переменную GET, сценарий записывает изменение и обновляет переменную «updates available», AJAX получает ответ что обновления действительно существуют, AJAX выполняет свои обычные функции «страницы обновления», которые выполняют обычные сценарии обновления и выводят их в браузер.
Я спрашиваю, потому что кажется действительно неэффективным, что js просто выполняет постоянную проверку, которая требует, чтобы: а) сервер работал каждые 1,5 секунды, и б) мой браузер выполнял работу каждые 1,5 секунды, чтобы я может сказать: «О, мальчик, я получил мгновенное сообщение! Как настоящий клиент IM!»