Comments 46
На работе тоже ставилась такая задача — выбрали long polling, потому что:
1. работает во всех браузерах
2. прост в реализации

Если вы посмотрите на дату стандарта XMLHttpRequest, то увидите что ему уже почти 6 лет. Stream клиенты основаны на нем же. Для меня остается загадкой, почему нет поддержки stream технологии в JQuery.
Я практик — перед использованием технологии я делаю прототип, проверяю — будет ли работать.
Так вот на IE 7,8 не шибко что то работает. Поэтому надёжней использовать long polling что бы не городить костылей для каждого браузера, когда их и так хватает.
Помоему в IE XMLHttpRequest реализован не так как у браузеров :) Помнится в те времена, когда js фреймворки не были так популярны, прходилось писаь как то так:
if браузер then XMLHttpRequest else {какой то ие'шный синтаксис}
UFO landed and left these words here
Небольшое дополнение: keep-alive может игнорироваться браузерами по их собственному внутреннему усмотрению. Потому, время ожидания стоит ограничить каким-то разумным промежутком и при отсутствии обновления присылать nop по истечению таймаута.
Вам спасибо.
P.S. Вот только пока не хватает кармы, чтобы опубликовать её в коллективный блог.
А как проверили что long polling сейчас работает с актуальными прокси? По ситуации на несколько лет назад, был ряд проблем — «умные» прокси, не увидив от сервера ответ в течении нескольких секунд рвали TCP соединение вне зависимости от keep alive «в целях экономии ресурсов». Как бы выяснить текущую ситуацию…
На текущий момент работает(по крайней мере: ISA server 2006, Traffic Inspector, Squid).
Я имею в виду глобально в интернете, для целевой аудитории. Понятное дело что в лабораторных условиях на каких-то конфигурациях работает все что угодно. А в реальном мире — злобные провайдеры, непонятно какие и непонятно как настроенные прокси, кэширование там где не просят и прочие радости дикого интернетостроени :).
Если что-нибудь всплывет, то я сообщу. У данного приложения не очень высокий круг пользователей(теперь будет что оттестировать на работе получше).
Был бы очень благодарен, думаю остальные читатели поддержат. На мой взгляд, сейчас самая ценная информация по реализациям Ajax это насколько они совместимы с «текущим состояние интернета».
Наша практика показала, что Streaming блокируется огромным количеством антивирусов. Правда, это можно обойти при помощи https =)
С HTTPS говорят еще больше проблем — многие прокси их просто блокируют без объяснения причин :(. Но в последние несколько лет вроде получше стало.
Я не могу понять, откуда ростут ноги у дурацкой привычки выполнять интервал через eval вместо ссылки на фунцию?:
intervalId = setInterval ( "requestUpdate()", 1000 );
// =>
intervalId = setInterval ( requestUpdate, 1000 );


Из PHP? До недавнего времени только синтаксис аналогичный первому работал, правда скобки не нужны.
UFO landed and left these words here
но в статье нет двойных кавычек (в любом случае сейчас):
intervalId = setInterval ( requestUpdate(), 1000 );

что меня удивило, ибо функция выполняется 1 раз и не возвращает другую функцию!
В статье были двойные кавычки.
Сейчас там вообще неправильно написано =)

Автору — надо писать именно так:
intervalId = setInterval ( requestUpdate, 1000 );

Т.е. мы передаём ссылку на функцию, которая будет выполняться.
>> WebSockets я исключил сразу, потому как не у всех клиентов могут быть установлены современные браузеры

socket.io? Красиво, удобно…
Но ещё пока не стандарт де-факто, хотя нет сомнения будущее у него прекрасное
что значит стандарт? пока это одно из лучших и самое кроссплатформенное решение. еще есть SockJS
Повторюсь, long polling был выбран как раз таки потому, что он работает везде.
P.S. Заставьте работать сокеты на IE8.
и что? тогда сбрасываеться на поллинг. Но если юзер сам себе буратино то я ему не помощник. А если обрубан кабель интернета то что? Почему сервис должен все делать для странных юзеров?
обычно это замороченные люди которые никогда никому не платят «в этих ваших интернетах».
Почему так категорично? У меня нетбук не тянет много флэша, так что flashblock для меня спасение. И почему я замороченный человек? И почему я никому ничего не плачу «в этих наших интернетах»?
Я не имею ввиду лично Вас. Хотя если для вас компьютер это инструмент и вы еще не позаботились о нормальном инструменте — вполне возможно не стоит оптимизировать.

Еще раз — чем больше сервисов будет всеравно работать на самом убогом железе и старых браузерах — тем меньше будет стимулов к нормальной работе в нормальных системах. тоько так. Я лично не хочу сам себе рыть яму поддерживая устаревшие системы.
Наверное зря влез, просто хотел сказать что пользователи flashblock не замороченные люди. Для меня вопрос не актуален, так как браузер постоянно обновляется.
У меня современный, мощный компьютер и работает быстро. Но когда включен flashblock, он работает еще быстрее, намного быстрее. И я не «сам себе буратино», я просто люблю когда все работает очень быстро, поэтому у меня включен flashblock.
и что значит не тянет флеш. Анимация баннеры игры — это одно. Флеш сокет умешаеться на 50 строках ас2 и работает практически незаметно
Скажите это другим сайтам, открытым в соседних вкладках, с флэш-баннерами.
Если нет флэша — идет откат до того же самого лонг полинга из статьи.
Но чем дальше — тем больше людей незаметно для себя будут работать с вебсокетами.
Просто удобно. Кто умеет тому сокеты, кто нет — тем тот же лонг пулинг
Там в новых версиях реализация сервер-части немного, но измененная. Это ломает существующие реализации в сторонних библиотеках. Приходится замораживать используемый номер версии этой библиотеки.
Насколько я понимаю, со stream есть проблемма с тем, что в http нету flush-а и мелкие пакеты будут часто не доходить сразу, кэшируясь в группы по дороге на всяких маршрутизаторах. И единственный способ это решить — закрывать соединение сразу после отправки пакета.
Only those users with full accounts are able to leave comments. Log in, please.