php, ajax, статус запроса

max111111111111111

Новичок
При загрузке сайта ajax устанавливает 25 секундное соединение с сервером (либо меньшее - до появления данных). Так вот - иногда(!) если обновить страницу (перейти по ссылке) браузер подвисает примерно на 5-7 секунд и показывает статус соединения с сервером - "canceled" а новый запрос имеет статус "pending". Как я понял новый запрос ждет пока браузер закроет ранее установленное соединение с сервером - как это можно исправить?
На скрипт jquery (который соединяется с сервером) повесил обработку fail, statusCode(404) - и вызываю в у них abort() - не помогает.
 

c0dex

web.dev 2002-...
Команда форума
Партнер клуба
1. Почему в теории?
2. Какое еще 25 секундное соединение? Код где?
3. 404 это ответ "не найдено", каким оно тут боком?
 

max111111111111111

Новичок
2) Как я понял - это long pooling. 3) 404 - на всякий случай - я в курсе что он тут не особо к месту. 1) Можно проще - из-за чего браузер висит со статусом "canceled" старого соединения и не грузит новый запрос

Код соединения с сервером:
Read: function() {
if (user.conn) {
user.read = $.ajax({
statusCode: {
404: function() { $(this).abort(); }
},
fail: user.onFail,
url: this.url,
async: true,
data: 'action=Read&sock='+user.sock,
success: user.onSuccess,
complete: user.onCompleteRead
});
}
}
 

c0dex

web.dev 2002-...
Команда форума
Партнер клуба
max111111111111111, во-первых не long pooling, а long polling, во-вторых есть спец средства (comet) - для того, чтобы слушать сервер и выплевыпать ответ от сервера клиенту
 

max111111111111111

Новичок
max111111111111111, во-первых не long pooling, а long polling, во-вторых есть спец средства (comet) - для того, чтобы слушать сервер и выплевыпать ответ от сервера клиенту
Ненавижу форумы - все сводится к тому, чтобы мне объяснили что я тупой лох а на вопрос так никто и не отвечает. Да есть comet бла бла исправили мне написание ( ЭТО ВАЖНО В ДАННОМ ВОПРОСЕ ) - спасибо вам - вы молодец - унизили - а есть кто-нибудь, кто знает что это такое за состояние "canceled" и что его вызывает? - мне это нужно!
 

AmdY

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

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

HraKK

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

П.С. от себя: свалил бы ты в садик что-ли, пока не осознаешь как в мире надо жить и общаться. А если ты такой крутой - сиди в своем мирке и не высовывайся, всего же сам добьешься.
 

ghost9

Новичок
max111111111111111, тебе c0dex не зря сказал про comet, только он мысль до конца не развил. Php для такого вообще не предназначен, т.к. в нем НЕТ fastcgi(не путать с самим интерпретатором, я про скрипты). Если в том же play держать ws и long polling соединения для приложения не очень накладно, то php будет дико жрать память и лагать уже при 10-20 таких коннектах.
 

AmdY

Пью пиво
Команда форума
ghost9, да успокойтесь, второй раз за день слышу эту ересь, php в режиме демона сотнями и тысячами такие соединения держать может ещё со времён 4-ки, а сейчас я даже не припомню какая функции течёт и даже рекурсивные ссылки на деструкторе можно не рушить руками.
 

ghost9

Новичок
AmdY, да я не про текущую память говорю. При каждом запросе почти любой скрипт кладет в память довольно много данных. И эти данные дублируются. Например, при fastcgi-модели объект(массив) с конфигом один на все приложение, а в cgi их столько, сколько соединений. И если обычно скрипт выполняется 0.0x сек., а потом рама чистится, то lp-соединения будут висеть и жрать память. Жрать не потому, что где-то течет, а by design. Именно это и хочет ТС. А демоны - это уже совсем из другой песни. Хотя, и long polling чаще всего не нужен, достаточно получать данные обычным запросом раз в 2-3 секунды. И вообще все тлен.
 

AmdY

Пью пиво
Команда форума
ghost9, fastcgi это про то, что приложение запускается один раз, а не про объекты и общую память. В режиме демона php работает полностью в соответствие с fastcgi, это помогает экономить столько ресурсов, что с лёгкостью держатся тысячи потоков, а лагает при 10-20 как вы писали выше. Хотя сейчас встроенный опкод, генераторы и корутины, так что можно даже объекты шарить, хотя с php подходом проще разрабатывать и дебажить.

p.s. Кстати, вебсокеты забыли.
 
Сверху