Комментарии 46
На работе тоже ставилась такая задача — выбрали long polling, потому что:
1. работает во всех браузерах
2. прост в реализации
1. работает во всех браузерах
2. прост в реализации
Если вы посмотрите на дату стандарта XMLHttpRequest, то увидите что ему уже почти 6 лет. Stream клиенты основаны на нем же. Для меня остается загадкой, почему нет поддержки stream технологии в JQuery.
Я практик — перед использованием технологии я делаю прототип, проверяю — будет ли работать.
Так вот на IE 7,8 не шибко что то работает. Поэтому надёжней использовать long polling что бы не городить костылей для каждого браузера, когда их и так хватает.
Так вот на IE 7,8 не шибко что то работает. Поэтому надёжней использовать long polling что бы не городить костылей для каждого браузера, когда их и так хватает.
Небольшое дополнение: keep-alive может игнорироваться браузерами по их собственному внутреннему усмотрению. Потому, время ожидания стоит ограничить каким-то разумным промежутком и при отсутствии обновления присылать nop по истечению таймаута.
Прекрасная статья, спасибо
А как проверили что long polling сейчас работает с актуальными прокси? По ситуации на несколько лет назад, был ряд проблем — «умные» прокси, не увидив от сервера ответ в течении нескольких секунд рвали TCP соединение вне зависимости от keep alive «в целях экономии ресурсов». Как бы выяснить текущую ситуацию…
На текущий момент работает(по крайней мере: ISA server 2006, Traffic Inspector, Squid).
Я имею в виду глобально в интернете, для целевой аудитории. Понятное дело что в лабораторных условиях на каких-то конфигурациях работает все что угодно. А в реальном мире — злобные провайдеры, непонятно какие и непонятно как настроенные прокси, кэширование там где не просят и прочие радости дикого интернетостроени :).
Если что-нибудь всплывет, то я сообщу. У данного приложения не очень высокий круг пользователей(теперь будет что оттестировать на работе получше).
Я не могу понять, откуда ростут ноги у дурацкой привычки выполнять интервал через eval вместо ссылки на фунцию?:
intervalId = setInterval ( "requestUpdate()", 1000 );
// =>
intervalId = setInterval ( requestUpdate, 1000 );
Из PHP? До недавнего времени только синтаксис аналогичный первому работал, правда скобки не нужны.
Только сегодня наткнулся на сайт о том, какие самозванцы w3schools (всегда этот сайт терпеть не мог — бессмыслен, ошибочен, поверхностен)
но в статье нет двойных кавычек (в любом случае сейчас):
что меня удивило, ибо функция выполняется 1 раз и не возвращает другую функцию!
intervalId = setInterval ( requestUpdate(), 1000 );
что меня удивило, ибо функция выполняется 1 раз и не возвращает другую функцию!
>> WebSockets я исключил сразу, потому как не у всех клиентов могут быть установлены современные браузеры
socket.io? Красиво, удобно…
socket.io? Красиво, удобно…
Но ещё пока не стандарт де-факто, хотя нет сомнения будущее у него прекрасное
что значит стандарт? пока это одно из лучших и самое кроссплатформенное решение. еще есть SockJS
Повторюсь, long polling был выбран как раз таки потому, что он работает везде.
P.S. Заставьте работать сокеты на IE8.
P.S. Заставьте работать сокеты на IE8.
для этого есть flash fallback. работает отлично.
flashblock?
и что? тогда сбрасываеться на поллинг. Но если юзер сам себе буратино то я ему не помощник. А если обрубан кабель интернета то что? Почему сервис должен все делать для странных юзеров?
потому что они могут нести профит)
обычно это замороченные люди которые никогда никому не платят «в этих ваших интернетах».
Почему так категорично? У меня нетбук не тянет много флэша, так что flashblock для меня спасение. И почему я замороченный человек? И почему я никому ничего не плачу «в этих наших интернетах»?
Я не имею ввиду лично Вас. Хотя если для вас компьютер это инструмент и вы еще не позаботились о нормальном инструменте — вполне возможно не стоит оптимизировать.
Еще раз — чем больше сервисов будет всеравно работать на самом убогом железе и старых браузерах — тем меньше будет стимулов к нормальной работе в нормальных системах. тоько так. Я лично не хочу сам себе рыть яму поддерживая устаревшие системы.
Еще раз — чем больше сервисов будет всеравно работать на самом убогом железе и старых браузерах — тем меньше будет стимулов к нормальной работе в нормальных системах. тоько так. Я лично не хочу сам себе рыть яму поддерживая устаревшие системы.
Наверное зря влез, просто хотел сказать что пользователи flashblock не замороченные люди. Для меня вопрос не актуален, так как браузер постоянно обновляется.
У меня современный, мощный компьютер и работает быстро. Но когда включен flashblock, он работает еще быстрее, намного быстрее. И я не «сам себе буратино», я просто люблю когда все работает очень быстро, поэтому у меня включен flashblock.
и что значит не тянет флеш. Анимация баннеры игры — это одно. Флеш сокет умешаеться на 50 строках ас2 и работает практически незаметно
Просто удобно. Кто умеет тому сокеты, кто нет — тем тот же лонг пулинг
Кстати, на счёт картинок. Имхо, здесь они выглядят значительно лучше и понятнее:
http://sontan.name/blog/view/~real-time-web-and-comet
http://sontan.name/blog/view/~real-time-web-and-comet
Советую обратить внимание на спецификацию Servlet 3.0:
официальная документация
блоги Oracle
Tomcat javadoc
официальная документация
блоги Oracle
Tomcat javadoc
Насколько я понимаю, со stream есть проблемма с тем, что в http нету flush-а и мелкие пакеты будут часто не доходить сразу, кэшируясь в группы по дороге на всяких маршрутизаторах. И единственный способ это решить — закрывать соединение сразу после отправки пакета.
Зарегистрируйтесь на Хабре, чтобы оставить комментарий
Асинхронный обмен данными поверх HTTP