ShadowOfCasper
@ShadowOfCasper
Middle User Interface Web Developer

Что скажете о javascript webSocket?

Не так давно посоветовали мне на одном паблике новый инструмент ES6. Посоветовали, когда я заикнулся об ajax. Очень классная фишка, судя по описанию.
"Он позволяет пересылать любые данные, на любой домен, безопасно и почти без лишнего сетевого трафика." - заявлено на https://learn.javascript.ru/websockets.
Был ли у кого-нибудь опыт работы с этой штукой, и возможно ли его применять на практике в текущий момент времени.
Дело в том, что на https://learn.javascript.ru/websockets можно вычитать о наличии уязвимости в системе + протокол WSS тоже пугает. К тому же фишка из ES6, я думал поддержка будет хромать, а она больше 90%.

Туториал сложный. Много конвертации.
Правильно ли я понял, что данная технология не оставляет длинные запросы в адресной строке?
Ваше мнение: стоит ли изучить и использовать технологию в коммерческих проектах?
  • Вопрос задан
  • 1104 просмотра
Решения вопроса 1
Wolfnsex
@Wolfnsex
Если не хочешь быть первым - не вставай в очередь!
Ваше мнение: стоит ли изучить и использовать технологию в коммерческих проектах?
Поверьте, стоит. Некоторые финансовые биржи (как пример коммерческого проекта) активно их используют. Веб-сокет, это по сути своей самый обыкновенный сокет, который используется примерно везде (в 99% программ) работающих с сетевым трафиком, накрученный поверх веб-реалий (протокола HTTP).

Правильно ли я понял, что данная технология не оставляет длинные запросы в адресной строке?
Эта технология вообще ничего не делает с адресной строкой и никак с ней не связана. Это технология для передачи данных на постоянной основе в режиме реального времени, например, она идеально подходит для реализации чатов.

можно вычитать о наличии уязвимости в системе
Если мне не изменяет память, наличие уязвимости возможно в случае использования прокси-сервера ("палёного") и отсутствия шифрования.

К тому же фишка из ES6, я думал поддержка будет хромать, а она больше 90%.
Возможно я ошибаюсь, но я не помню связи между RFC-спецификацией и ES6, к тому же, по моему, ES6 появилась позже 2011г. (в котором появилась RFC-спецификация на веб-сокет).

Был ли у кого-нибудь опыт работы с этой штукой, и возможно ли его применять на практике в текущий момент времени.
Был, писал и сервер и клиент на C/++, ничего особо сложного не заметил, вопрос времени и желания, что бы детально разобраться... JS-фреймворки и библиотеки (например, Socket.IO), некоторые, активно применяют веб-сокеты в качестве замены лонг-пулам, флеш-сокетам и пр. ерунде.

Году в 2013-2014, поддержка была ещё не очень уверенная... в 2016-2017м, я бы не особо беспокоился за пользователей, чьи браузеры веб-сокет не поддерживают. Пусть лучше страдает 3% тех, у кого их нет, чем 97% тех, кто мог бы их использовать, но не используют в угоду тем 3%...
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 2
IonDen
@IonDen
JavaScript developer. IonDen.com
Тыщу лет уже все используют вебсокеты: socket.io/docs

Главное понимать то, что вебсокеты нужны не для того, для чего нужен Ajax, у них другое предназначение.
Суть вебсокетов - непрерывно открытое соединение с сервером и сверхбыстрый обмен данным.

Основные потребители этой технологии - чаты, игры, сервисы для одновременного редактирования документов и т.п.
Ответ написан
bingo347
@bingo347 Куратор тега JavaScript
Crazy on performance...
Во-первых, websocket - это протокол передачи данных, реализованный поверх http (wss - websocket secure работает через https соответственно) и к ECMAScript (спецификация для языков JavaScript, ActionScript и иже с ними) никакого отношения не имеет.
Во-вторых, реализация websocket клиента включена в спецификацию BOM (Browser Object Model), из актуальных браузеров поддержка есть почти везде, не поддерживают только IE9 и ниже (критично только если ресурсом будут пользоваться в госсекторе) и OperaMini (мобильный браузер, который по реализации стандартов застрял где-то в 90х)
В-третьих, websocket кардинально отличается от ajax:
ajax позволяет делать классические http запросы и работает по принципу запрос-ответ
websocket же устанавливает постоянное соединение, после чего общение происходит в виде отправки сообщений, притом сообщения могут отправлять как сервер так и клиент в любой момент времени пока установлено соединение
В-четвертых, конкретно в реализации websocket клиента в браузере есть ряд ограничений:
Нельзя управлять заголовками при установлении соединения, единственный способ передать какие-либо данные на сервер в момент установления соединения - это url
На протяжении всего соединения будет только один формат обмена данными, на выбор есть строки, ArrayBuffer и Blob. Если есть необходимость отправлять по сокету как бинарные данные так и строки, то строки придется на js паковать в ArrayBuffer или Blob и, соответственно, распаковывать обратно при получении сообщений
В-пятых, хотя правильнее наверно в-нулевых, сервер должен уметь работать по протоколу websocket

В целом, вебсокеты можно использовать как альтернативу ajax, в SPA приложениях он может даже дать прирост скорости в общении с серверным апи в виду постоянного соеденения, но есть свои заморочки:
придется самостоятельно реализовывать систему запрос-ответ (тут можно взять такую вещь как socket.io и не парится, хоть и тормазнутая, зато удобная + есть имитация поверх других транспортов для всяких там IE9)
при отправки больших данных, придется заморачиваться разбивкой на части, иначе другие сообщения будут ждать пока сообщение будет отправлено (не стоит отправлять больше 256кб за раз)
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы
23 нояб. 2024, в 01:31
1000 руб./за проект
23 нояб. 2024, в 00:16
2000 руб./за проект