Сохранение открытого соединения в Internet Explorer (7,8,9) - PullRequest
1 голос
/ 16 декабря 2011

Я нахожусь в проекте, где мне нужно подключиться к клиентскому серверу и получить данные для некоторых графиков.

Клиент хочет, чтобы это было что-то в реальном времени (у него есть скрипт, который прослушивает соединения и постоянно передает данные).

Моя большая проблема заключается в том, что я не думаю, что это можно сделать в IE так же просто, как в Firefox или Chrome. Firefox и Chrome поддерживают веб-сокеты, поэтому я думаю, что смогу сделать то, что будет делать именно то, что хочет клиент.

В IE единственный способ сделать это - использовать setTimeout с вызовом ajax.

Есть ли другая альтернатива для IE ??

На данный момент мы используем jquery .ajax () и устанавливаем обратный вызов для события onReadystageChanged, которое обрабатывает ответ сервера, когда readyState == 3. Но это не работает должным образом, поскольку соединение закрывается после первого ответа .

Кроме того, я использую IIS с модулем маршрутизации запросов приложений в качестве прокси-сервера и правила перезаписи URL, поскольку мы используем междоменные сервисы. Но этот модуль использует буфер размером не менее 1 КБ, который искажает ответ сервера. Сервисы были созданы другой компанией, которая не будет внедрять спецификацию CORS на своем сервере.

Как я могу обойти это и получить ответ без буферизации?

Спасибо

1 Ответ

1 голос
/ 16 декабря 2011

Вместо WebSockets вы можете использовать длинный опрос и обещание на стороне сервера.

На сервере вы можете приостановить http-запрос, чтобы он работал асинхронно.

Пример jQuery :

poll();    
function poll(){
    $.ajax({
        url : "http://my-own-domain.com/data/",
        success : function(data) {
            //do what you want with data
            poll();
        },
        error : function(data) {
            poll();
        }
    });
}

Пример на стороне сервера:

WSRequest req = WS.url("http://the-other-domain.org/data/");
Promise<HttpResponse> respAsync = req.getAsync();
HttpResponse resp = await(respAsync);
renderJSON(resp.getString());

Для серверной стороны взгляните на Играть!Framework Async , чтобы понять, как это можно сделать.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...