отправить обновление XML-файла с сервера на все клиентские браузеры? - PullRequest
3 голосов
/ 12 мая 2011

Мне интересно, можно ли отправить обновление xml-файла с сервера на все клиентские браузеры?В основном моя предложенная ситуация такова, что мой сервер содержит файл XML, когда пользователь загружает страницу, которая использует указанный файл XML, он может запросить его изменение, если изменение разрешено (определяется на стороне клиента страницы), тогда файл XML обновляется.на стороне сервера.Я в порядке до этого момента (ну, у меня есть много чтения, чтобы привести меня к этому моменту).Затем я хочу, чтобы все подключенные страницы обновляли все элементы страницы, зависящие от XML-файла, без обновления всей страницы.
Другими словами, все эти страницы используют файл для обновления своих копий-> данных, если копия на сервере новее, чем у них.Возможно ли это с помощью принудительной отправки на сервер, или мне нужно постоянно опрашивать сервер для сравнения файлов?(Мне это кажется неряшливым ..) И если это возможно, как лучше это сделать?

Спасибо за любые пункты в правильном направлении.

Ответы [ 2 ]

3 голосов
/ 12 мая 2011

Поскольку веб-страница не имеет состояния, вы не можете отправлять на нее данные. Вам необходимо опросить сервер на наличие обновлений. Подумайте о маленьком ajax-скрипте, который опрашивает каждые 5 минут, когда контент обновляется, этот скрипт вызывает что-то для обновления страницы. Вам понадобится много Ajax, чтобы сделать это; для этого возьмите jQuery или что-то подобное.

0 голосов
/ 12 мая 2011

Вы можете попробовать AJAX-вызов некоторого php-скрипта, например:

set_time_limit(3600); // one hour or set it as long as your session timeout is
// Keep on repeating this to prevent PHP from stopping the script
while (true)
{
  sleep(5); //5 seconds between polling the server
  //do the updates xml updates
  flush();
  ob_flush();
}

Соединение будет оставаться открытым, каждые 5 секунд будет извлекаться xml и обновляться клиент.

Если вы не хотите тратить много времени и ресурсов на извлечение данных, если они не изменены, вы можете использовать APC, memcache или любую другую переменную, хранящуюся на сервере, которая уведомляет вас об изменении XML.

if(apc_fetch('xml_updated') == 1)
{
    //do the xml pull
}

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

Надеюсь, это поможет!

...