Здравствуйте!
Разбираюсь с Comet технологиями. Возникла следующая проблема, решение которой я так и не смог найти. Итак, все по порядку:
Имеем сервер:
Создаем XmlHttpRequest соединение на стороне клиента:
На стороне сервера ловим и удерживаем соединение следующим образом:
Итак, а теперь о проблеме: хочется этим соединением управлять, а если быть точным, хочется его обрывать по таймеру или по каким-то другим событиям. Убиваю XMLHttpRequest:
Запрос действительно убивается, но соединение остается. Поэтому, приходится ждать, пока на сервере закончится цикл и только после этого возможно совершать другие действия (перезагрузить или перейти на другую страницу и т.д.). Вот и вопрос: как правильно убить данное соединение?
P.S. Конечно, лучше было бы использовать websocket или IFrame, но хотелось бы разобраться полностью в данной технологии.
Разбираюсь с Comet технологиями. Возникла следующая проблема, решение которой я так и не смог найти. Итак, все по порядку:
Имеем сервер:
- PHP 5.3.13
- Apache/2.2.22 (Unix)
Создаем XmlHttpRequest соединение на стороне клиента:
function getXmlHttp(){
var xmlhttp;
try {
xmlhttp = new ActiveXObject("Msxml2.XMLHTTP");
} catch (e) {
try {
xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
} catch (E) {
xmlhttp = false;
}
}
if (!xmlhttp && typeof XMLHttpRequest!='undefined') {
xmlhttp = new XMLHttpRequest();
}
return xmlhttp;
}
xml = getXMLHttpRequest();
xml.onreadystatechange = function(){
if(xml.readyState == 3){
console.log(xml.responseText);
}
};
xml.open('POST', "/events/allEvents", true);
xml.send(null);
На стороне сервера ловим и удерживаем соединение следующим образом:
set_time_limit(0);
while(@ob_end_flush()){}ob_implicit_flush(1);
for($i=0; $i<100; $i++){
// Что-то делаем...
sleep(1);
}
Итак, а теперь о проблеме: хочется этим соединением управлять, а если быть точным, хочется его обрывать по таймеру или по каким-то другим событиям. Убиваю XMLHttpRequest:
xml.abort()
Запрос действительно убивается, но соединение остается. Поэтому, приходится ждать, пока на сервере закончится цикл и только после этого возможно совершать другие действия (перезагрузить или перейти на другую страницу и т.д.). Вот и вопрос: как правильно убить данное соединение?
P.S. Конечно, лучше было бы использовать websocket или IFrame, но хотелось бы разобраться полностью в данной технологии.