Как обновить асинхронные страницы по событию от другого клиента? - PullRequest
0 голосов
/ 17 сентября 2010

Я в настоящее время дурачусь с AJAX.Прямо сейчас я создал предварительный просмотр Markdown, который обновляет информацию об изменении текстовой области.(Я думаю, вы знаете, что откуда-то ... ;-)).

Теперь я пытаюсь выяснить, как обновить страницу при возникновении события из другого клиента.Так сказать асинхронная доска объявлений.Пользователь что-то пишет, вызывается событие, пишется сообщение.

Но на страницах других клиентов новое сообщение, конечно, пока недоступно, пока он не перезагрузится и не получит обновленный список сообщений избаза данных.

Теперь, как вы можете заставить это работать асинхронно?Таким образом, в тот момент, когда один клиент что-то делает, все другие клиенты узнают, что он что-то сделал?

Я не думаю, что это можно сделать полностью в AJAX, но я также не знаю, какреализовать это на стороне сервера, так как для информирования других клиентов о событии потребуется перезагрузка страницы.

Я думаю о создании файла или записи базы данных, которая хэширует текущее состояние данных.Всякий раз, когда клиент загружает страницу, он сохраняет этот хэш.Затем таймер (существует ли он в JavaScript?) Проверяет хэш каждые несколько секунд.

Как только кто-либо изменяет базу данных, хэш пересчитывается.Если скрипт видит, что хеш был изменен и отличается от сохраненного, он перезагружает содержимое базы данных и сохраняет новый хеш.

Это даже сработает?

Ответы [ 2 ]

2 голосов
/ 17 сентября 2010

Опрос, который является максимально легким, действительно является лучшим решением.Даже если вы использовали сокет или что-то в этом роде ... Это все еще в основном живое соединение, ожидающее вокруг, которое, вероятно, должно будет опросить себя (хотя и более эффективным способом).

20 запросов за 10 минут, которые имеют ответыlike {"updates": false} даже не должен оставлять вмятину в вашем приложении.Я имею в виду, что кто-то просматривает ваш сайт, запрашивая 20 страниц и связанные изображения / сценарии / и т. Д. (Даже если кеширование происходит), могут быть сотни запросов, требующих, чтобы на их страницах отображались всевозможные ненужные запросы базы данныхна самом деле не волнует.

1 голос
/ 17 сентября 2010

Вы можете использовать опрос.Например, каждый клиент может отправлять непрерывные запросы AJAX на сервер каждые 30 секунд, чтобы узнать, доступны ли новые сообщения, и, если да, показать их:

setInterval(function() {
    // TODO: Send an AJAX request here to the server and fetch new posts.
    // if new posts are available update the DOM
}, 30 * 1000);

С другой стороны, когда кто-то решает написатьВ новом сообщении вы отправляете запрос AJAX (или не AJAX) на сервер для сохранения этого сообщения в базе данных.

Еще один менее часто используемый подход - это концепция Comet и HTML 5 WebSockets реализация, которая позволяет клиентам уведомлять сервер об изменениях с помощью push.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...