Хабр Курсы для всех
РЕКЛАМА
Практикум, Хекслет, SkyPro, авторские курсы — собрали всех и попросили скидки. Осталось выбрать!
Что именно отправлять, разработчики полностью оставили на ваше усмотрение: хотите XML, хотите AJAX, да хоть стихи Пушкина.

Для использования же WebSockets веб-приложения должны писаться в рассчете на них. Пока эта технология не будет поддерживаться браузерами большинства пользователей — этого не будет
В частности даже официальная дока говорит о том, что прокси серверы могут закрывать неактивное соединение, поэтому периодически надо отправлять пустые сообщенияЭто недостаток SSE? Но он же есть и в WebSockets. Или WebSockets соединения прокси почему-то не будут закрывать?
Поэтому, на мой взгляд, SSE уже потерял актуальность. Лично я не хочу тратить на него свое время.Вы как-то очень уж горячо взялись пропагандировать WebSockets и гнать от себя SSE. Вы знаете, что, например, существуют прокси и firewalls, которые режут незнакомые (да и некоторые знакомые, например, Accept-Encoding) заголовки? Как WebSockets будут чувствовать себя с таким софтом. Если мне не изменяет память, это около 10% всех подключений.
Кстати, если говорить про реализацию в Опере 9, то она не идеальна — в стандарте предусмотрено название тега eventsource, а в опере тег называется event-sourceСтандарт меняется. Это ещё не релиз.
WebSockets использует HTTP только для коннекта дальше идет чистая TCP-сессия, SSE — на всем протяжении сессии для транспорта.В любом случае, это протокол внутри HTTP, а не TCP.
WebSockets через прокси идет как бинарный трафик (метод CONNECT), SSE как чистый HTTP.prooflink?
Разработчики уделили пробиваемости проксей немало времени.Что они сделали для этого, я не увидел?
Это серьезная проблема. Стандарт еще не готов, а уже устарел. Необходимость в нем уже отпала. Когда он выйдет, WebSockets захватит рынок.Так часто бывает с вещами, которые вышли до окончательного принятия стандарта. Вы, видимо, просто не следите за реализациями в браузере вещей из WHATWG.
EXAMPLE: For example, if the user agent uses an HTTP proxy
for all traffic, then if it was to try to connect to port 80
on server example.com, it might send the following lines to
the proxy server:
CONNECT example.com:80 HTTP/1.1
Host: example.com
If there was a password, the connection might look like:
CONNECT example.com:80 HTTP/1.1
Host: example.com
Proxy-authorization: Basic ZWRuYW1vZGU6bm9jYXBlcyE=
Otherwise, if the user agent is not configured to use a proxy,
then open a TCP/IP connection to the host given by /host/ and
the port given by /port/.
As currently specified in
www.w3.org/html/wg/html5/#server-sent-events, HTTP proxies may buffer
fragments of the HTTP response, because they may legitimately assume that an
entire HTTP response is expected by the browser. This buffering behavior is
clearly bad for the end-to-end latency of message delivery and should be
avoided if possible.
7.2.5 Notes
Legacy proxy servers are known to, in certain cases, drop HTTP connections after a short timeout. To protect against such proxy servers, authors can include a comment line (one starting with a ':' character) every 15 seconds or so.
В Хроме все изменения сделаны в WebKit — а значит очень скоро появится поддержка в Safari.WebKit — это движок рендеринга.

В обычном сетевом, не веб мире, долгие коннекты вполне себе банальное действо.
Но вот оно доползло до HTTP и все, революция. Ничуть.
Флеш спокойно позволяет держать сокеты.
Поэтому я все же настаиваю, что в данном случае WebSockets это не более, чем описание интерфейса для старой технологии созданное для веба.
это не вопрос создания новой технологии, а просто вопрос того, сколько крупных игроков поддержит эту реализацию
(XHR поддержали очень многие и это стало очень быстро развиваться)
А если нельзя, но очень хочется?
На этот случай придуман временный заменитель — библиотечка web-socket-js с помощью флеша эмулирующая веб-сокеты
0x00, <строка в кодировке UTF-8>, 0xFF
0x80, <длина — один или несколько байт>, <тело сообщения>
...Что значит «один или несколько байт»? Чтобы не создавать ограничений на длину передаваемого сообщения и в тоже время не расходовать байты нерационально, разработчики использовали очень хитрый способ указания длины тела сообщения. Каждый байт в указании длины рассматривается по частям: самый старший бит указывает является ли этот байт последним (0) либо же за ним есть другие (1), а младшие 7 битов содержат собственно данные. Обрабатывать можно так: как только вы получили признак бинарного дата-фрейма 0x80, вы берете следующий байт и откладываете его в отдельную «копилку», смотрите на следующий байт — если у него установлен старший бит, то переносите и его в «копилку», и так далее, пока вам не встретится байт с 0 старшим битом. Значит это последний байт в указателе длины — его тоже переносите в «копилку». Теперь из всех байтов в «копилке» убираете старшие биты и слепляете остаток. Вот это и будет длина тела сообщения. Еще можно интерпретировать как 7-битные числа без старшего бита.
Привет из 2022 года! Технология вебсокетов полностью созрела и можно начинать пользоваться!
WebSockets — полноценный асинхронный веб