Периодические запросы на обновление страницы

Zextreo

Новичок
Периодические запросы на обновление страницы

Мне необходимо каджую секунду посылать запрос на сервер, в ответ я получаю строку в 10 символов (индификатор, для проверки изменились ли данные), и сравниваю ее с предыдущим индификатором.
Если они различаются, то мне нужно перегрузить страничку. Вообщем, думаю смысле ясен.

Выполнить, то что я написал могу (через AJAX), то при отправке и получения запросов через AJAX вместе с моими 10 символами приходит еще полколобайта всяких заголовков, котороые мне вообще не нужны, но которые сильно увеличивают трафик.

Внимание вопрос ;) Можно ли выполнить, то что я написал, но чтобы трафик был минимален?

Слышал еще про метод ApendChild, но протестировать не удалось.

Дополнительная информация:
Используя AJAX трафик составит ~ 1 Мб в час при подаче запроса на обновление кажую секунду.
При передаче необходимых мне 10 символов трафик составит 35 Кб в час при подаче запроса на обновление кажую секунду.
Как видите разница огромная. Использовал много способов, но так и не нашел. Может кто сталкивался с такой проблемой, напишите пожалуйста :)
 

Армян

Новичок
кури setTimeout() или если нужно прям постоянное обновление (каждую секунду) то кури технологию comet :) Кстати если через комет делать то какраз при отправке новой стоки заголовки не будут отправляться, а только данные.
 

A1x

Новичок
в comet нужен постоянно висящий серверный процесс с открытым соединением насколько я понимаю. Что тоже еще как посмотреть. Можно попробовать на флэше через сокеты.
 

Армян

Новичок
да, там соединение с сервером не разрывается, но при этом трафик не расходуется, насколько я знаю
 

Zextreo

Новичок
setTimeout() я им и задаю время запроса.

Попробую использовать этот "comet", может подойдет.
Для меня главное чтобы трафик был минимальным.

-~{}~ 29.08.08 14:15:

Вообщем, кажется я нашел то что искал!
СOMET как раз мне и нужен.

Всем спасибо.
 

dimagolov

Новичок
узнавать о том, что надо делать обновление каждую секунду при том, что период запрос-ответ займет как минимум пару секунд, да еще и сам рефреш странички займет по лучшим раскладам от 2 до 5 секунд...
в общем жесть.
 

Zextreo

Новичок
Запрос на обновление будет в 2 сек. Точнее, если использовать Comet, то данные клиенту будут отправляться раз в 2 сек. И если необходимо обновить, то произойдет рефреш страницы. Пока что рефреш, но планирую это сделать через AJAX, без перезагрузки, либо еще как-то.

Все-таки все это мне необходимо для онлайн игры, так что здесь скорость реакции очень важна.
 

dimagolov

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

Армян

Новичок
Zextreo
Даш ссылку когда реализуешь ? хочу посмотреть на комет в действии :) на локалке тестил а так в проектах не видел(незамечал?) еще :)
 

AmdY

Пью пиво
Команда форума
>Все-таки все это мне необходимо для онлайн игры, так что здесь скорость реакции очень важна.
>СOMET как раз мне и нужен.
весьма сомнительно, сервак ляжет как только все друзья войдут в игру, а о больших маштабах и подумать страшно.
с ajax каждые 2 секунды нужно быть аккуратным, так как будут накладки с запоздавшими ответами, нужно использовать id и timestamp
 

est-in

Новичок
>Apache/1.3.37 (Unix) mod_ssl/2.8.28 OpenSSL/0.9.7e PHP/4.4.7 FrontPage/5.0.2.2510
Zextreo, Вы под apache + mod_php хотите использовать Comet(Server push)?
Для server push онлайн игры нужен не традиционный подход...
 

Zextreo

Новичок
Я об Комете только узнал, сейчас разбираюсь. Как это отразится на сервере не знаю.

Сейчас на сайте работает ajax каждые 4 секунды (пользователь сам может отредактировать), и там есть глюки, иногда страницы сразу несколько раз запускается на переобновление, это наверное и связано с "накладки с запоздавшими ответами". Пока писал придумал как этого избежать ;)

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

dimagolov

Новичок
Zextreo, юзай setInterval а не setTimeout для регулярного обновления и будет тебе щастье. это про "несколько раз запускается на переобновление"
 

Zextreo

Новичок
> юзай setInterval а не setTimeout
Попытаюсь ;)

C Сomet так и не получилось ничего хорошего. Помучал один чат, который везде дается как пример работы с Комет. Вообщем, получилось так что он заглючил у меня на локальном компе, а если "дома" глючит, то на сервере уж точно. Решил пока повременить с этим, лучше еще "повылизываю" то что есть.

-~{}~ 31.08.08 01:57:

Переделал на setInterval с setTimeout.

Чтобы сократить трафик отправляю пустые заголовки:
header('X-Powered-By:');
header('Cache-Control:'); header('Expires:');
header('Pragma:'); header('Content-Type:');

И сжимаю страничку через gzip (2.2 - коэф. сжатия).

Кому интересно смотрите на сервере onlineigry.com.

-~{}~ 15.01.09 19:13:

Для тех кому интересно о comet что-то узнать....

Вообщем, сделал у себя на сайте (онлайн игры ) обновление данных через AJAX+COMET.
Теперь все игры стали быстрее в разы, практически все зависит, от того как быстро думают пользователи. Задержка сервера около 1 секунды. При периодическом опросе сервера задержка было около 5-6 сек. и трафик больше раза 2-3 получался.

Проверку обновились данные или нет делаю через файл. Почему-то, если сделать через запросы все виснет сразу, хотя запросы выполняются быстро...

Вот кусок кода, для проверки обновления данных:
PHP:
while (1)
{   // Проверка обновления данных игры
    usleep(700000); // Разгрузка процессора, 0.7 s
    $f = @fopen($filename, 'r');
    $code_new = fread($f, 10);
    fclose($f);
    if ($code != $code_new) break;
}
 
Сверху