//в глобальных переменных
var conn_cnt = 0,
conn_max = 10; //максимальное количество соединений
...
function rec() {
if (conn_cnt >= conn_max) { return false; }
conn_cnt++;
...
xmlhttpr.onreadystatechange = function() {
if (xmlhttpr.readyState == 4) {
conn_cnt--;
...
}
function tm() {
conn_cnt--;
...
}
AJAX. правиьность запросов
http://chat.lacetti.com.ua
прошу оценить кривизну AJAX'а...
Аякс каждые пару секунд обращается к бэкэнду, получает данные, выводит новые сообщения в окна...
Проблема в том, что в ФФ, например, остаются висеть десятки закрытых (вроде как) соединений...
Нужны советы по оптимизации...
Как заставить юзать одно соединение или минимум?
И как правильно обработать недополученный ответ от севера или вообще потерявшийся???...
У меня это всё кривенько...
Код:
function rec() {
xmlhttpr = getXmlHttpr();
xmlhttpr.open('POST', '/js/backend.php', true);
xmlhttpr.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
xmlhttpr.onreadystatechange = function() {
if (xmlhttpr.readyState == 4) {
if(xmlhttpr.status == 200) {
clearTimeout(t2);
eval(xmlhttpr.responseText);
tm();
}
}
}
var ss="uid="+uid+"&lo="+lo+"&lp="+lp+"&a=rec";
xmlhttpr.send(ss);
var t2 = setTimeout( "try { xmlhttpr.abort(); } catch (e) { } finally { tm();}", 15000);
}
function tm() {
var t1=setTimeout("rec();", 1000);
}
xmlhttpr = getXmlHttpr();
xmlhttpr.open('POST', '/js/backend.php', true);
xmlhttpr.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
xmlhttpr.onreadystatechange = function() {
if (xmlhttpr.readyState == 4) {
if(xmlhttpr.status == 200) {
clearTimeout(t2);
eval(xmlhttpr.responseText);
tm();
}
}
}
var ss="uid="+uid+"&lo="+lo+"&lp="+lp+"&a=rec";
xmlhttpr.send(ss);
var t2 = setTimeout( "try { xmlhttpr.abort(); } catch (e) { } finally { tm();}", 15000);
}
function tm() {
var t1=setTimeout("rec();", 1000);
}
Как заставить юзать одно соединение или минимум?
Вы пытаетесь ограничить количество соединений в выполнении скрипта...
НО количество ТЕКУЩИХ соединений И ТАК ограничено самой технологией в количестве 2 штук... т.е. более 2-х не закрытых соединений и так не может висеть.
----------
Может ли кто-то дать ссылку на русскоязычную статью по мультиплексорам (серверному приложению и механизму работы с клиентом)???
И в файрволе висит 50+ idle соединений...
Вопрос был к этому...
Только вчера до меня допёрло что из браузера этим управлять нельзя... бравзер открывает рэндомно свободный порт и устанавливает соединение...
Так что теперь вопрос больше сводится к корректности передачи данных и минимизации траффика для запросов.