IE Ajax Streaming / long-polling без свертывания сервера - PullRequest
1 голос
/ 03 мая 2011

Я пытаюсь решить, как сделать потоковую передачу для IE и длительный опрос, не сворачивая сервер. Вот что я имел в виду.

У меня будет сервлет с именем: TimeServlet.

в doGet или doPost (). Я приостановлю запрос и отправлю время каждую секунду.


....
suspend()

while(!stopped){
    request.writeln(new Date().toString());
}

или с Планировщиком и Runnable, но вы получите точку.

На клиенте в javascript я создам ajax-соединение.

Мои большие вопросы:

1 - Как сделать потоковую передачу с IE? с Firefox и Chrome я читаю данные, когда readyState == 3, но в IE данные доступны только на readyState == 4.

2 - Как я могу сделать длинный опрос в этом примере? Длинный блок опроса, пока на сервере не было данных для отправки, но в этом примере серверу всегда будет что-то выдвинуть, поэтому клиент будет делать что-то вроде while (true) и заполнять сервер. Я полагаю, что я должен сделать что-то подобное

ajax.push (null) ... on readyState == 4 -> read ... после этого setTimeout (resendRequest, 1); // 1 сек?

есть кто-то с таким образцом?

мой код отлично работает для FF и Chrome, но сейчас я ищу IE и Opera.

EDIT

Я обнаружил, что могу использовать XDomainRequest в IE для потоковой передачи. Это должно быть в коде вашего сервера:

response.setHeader ( "Access-Control-Allow-Origin", "*");

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

с Ajax это было легко .. ReadyState == 4. но я не знаю для XDomainRequest.

Мне нужно иметь возможность вызывать некоторые обратные вызовы JavaScript, когда соединение закрыто. Есть идеи?

1 Ответ

1 голос
/ 11 мая 2011

Я нашел, как обнаружить событие закрытия.Вы должны использовать метод onload.

Таким образом, код будет выглядеть так


var ajaxRequest = new XDomainRequest();


ajaxRequest.onload = function() { 
//alert("[XDR-onload]. responseText: <i>" + ajaxRequest.responseText + "</i>"); 
};

ajaxRequest.onerror = function() { alert("[XDR-onerror] Fatal Error."); };

ajaxRequest.ontimeout = function() { 
alert("[XDR-ontimeout] Timeout Error.");
};
ajaxRequest.onprogress = function() { 
//alert("[XDR-onprogress] responseText so far: <i>" + ajaxRequest.responseText + "</i>");
}; 

и не забудьте добавить заголовок в ответ (на стороне сервера)

response.setHeader ( "Access-Control-Allow-Origin", "*");

...