Длительные опросы. Подвисание,
Для обновления сообщений чата, использую "Длинные опросы (long poll)". Все работает как надо и сообщения обновляются. Но проблема в том что, когда пытаешься обновить страницу (F5) то ожидание ответа от сервера длится около 10-20 секунд. Если же перейти на другую страницу (где нет чата) то она тоже долго грузится, но последующие страницы уже нормально. Если вернутся обратно на страницу с чатом, то опять все долго при обновлениях.
Если же не использовать длинные опросы. А просто: Отправить запрос - получить ответ (обработать ответ) - через пару секунд опять отправть и т.д. То все нормально. Задержку на сервере делаю так: $time = time(); while(true) { // Тут получаю данные. if (count($messages) < 1 && time()-$time < 20) sleep(2); else break; // Если есть хоть одно сообщение или скрипт работает уже больше 20 секунд, то прерываю его работу, иначе останавливаю работу скрипта на 2 секунды, и по новой. } echo json_encode($messages); Хочу еще раз обратить внимание, что в скрипте все в порядке (если появляется сообщение или прошло 20 секунд то он прекращает работу как надо) и после получения ответа я через пол секунды отправляю еще раз запрос. В чем же может быть причина что подвисает загрузка страниц ? |
Цитата:
|
Это в каком-то одном браузере или во всех?
|
Цитата:
|
nyols, если хочешь сделать нормальный чат, пиши демона на стороне сервера, и соединяйся с ним посредством сокетов, и не будет тормозов и будет мгновенное уведомление от сервера. а PHP через апач не будет полноценным демоном.
|
если у тебя есть доступ к серверу, демона можно написать так же и на PHP но без апача используя pcntl_fork(); а так это все полная хрень, не вешай скрипт PHP и не будет браузер думать.
|
Цитата:
|
Смотрел пока что только в Google Chrome. Приду на работу посмотрю в FF и IE.
Вообще по сути для меня это не критичная проблема. Обойдусь и простыми аякс запросам. Делать демона на сервере нет смысла, так так у меня не то что бы чат (так сказал что бы понятнее было). Это как онлайн служба поддержки, просто обмен сообщениями между клиентом и администратором. Просто как говорится, факт остается фактом. И хочется узнать причину. Так сказать интереса ради. Цитата:
Я думал что браузер так долго ожидает ответа потому что потому что когда перезагружаю страницу то висит еще активное соединение сделанное аяксом. Но смотрел в файрбаге, при обновление страницы срабатывает abort то есть прерывается соединение (и другой запрос не отправляется). А значит с соединениями все в порядке. А причина может быть в самом сервере ? если да то как узнать ? |
Да, в FF и IE та же история.
Цитата:
Может аякс запрос прерывается а скрипт на сервере все равно выполняется ? Хотя вроде настройки на подобное не меняли. |
А ты попробуй уменьшить время задержки в PHP скрипте, и увидешь что станет меньше ждать... а то что FF показал команду аборт, это еще ни о чем не говорит
|
Часовой пояс GMT +3, время: 12:10. |