Какие браузеры поддерживают websocket

Обновлено: 07.07.2024

Я пробовал, socket.io, websockify, но ни один из них не оказался полезным.

Отсюда вопрос: возможно ли то, что я пытаюсь сделать? Есть ли способ, которым javascript, запущенный в браузере, может подключаться к сокету tcp и отправлять некоторые данные и прослушивать их, чтобы получить дополнительный ответ данных в сокете и распечатать его в браузере.

Если это возможно, может кто-нибудь указать мне правильное направление, которое поможет мне установить цель.

@kilaka: Потому что (стандартные) API, доступные в среде браузера , ограничены ими .

Что касается вашей проблемы, в настоящее время вам придется зависеть от XHR или веб-сокетов.

Chrome теперь поддерживает необработанные сокеты TCP и UDP в своих «экспериментальных» API. Эти функции доступны только для расширений и, хотя и задокументированы, на данный момент скрыты. При этом некоторые разработчики уже создают интересные проекты, используя его, например, этот IRC-клиент .

Чтобы получить доступ к этому API, вам необходимо включить экспериментальный флаг в манифесте вашего расширения. Использование сокетов довольно просто, например:

Повышается ли производительность по сравнению с Websockets и Rawsockets? Разве не позволяет javascript в браузере подключаться к TCP-порту, дыре в безопасности? Представьте, что javascript в вашем firefox / chrome подключается ко всему, что вы запускаете локально (скажем, MySQL DB), и публикуете данные на вредоносном сайте? @ArunAvanathan, что бы вы ни делали с ajax, вы можете делать с сокетами и наоборот . как я думаю, проблем с безопасностью нет.

Это будет возможно через интерфейс навигатора, как показано ниже:

Другой альтернативой является использование сокетов Chrome.

Создание связей

Отправка данных

Получение данных

Вы также можете использовать попытку использовать HTML5 Web Sockets (хотя это не прямая TCP-связь):

Ваш сервер также должен прослушивать сервер WebSocket, такой как pywebsocket, в качестве альтернативы вы можете написать свой собственный, как описано в Mozilla.

Этот ответ совершенно неверен и должен быть удален. @Brad, этот ответ помог мне, и, должно быть, помог некоторым другим, также получившим 22 голоса.

Проект ws2s направлен на перенос сокетов в js на стороне браузера. Это сервер websocket, который преобразует websocket в сокет.

принципиальная схема ws2s

введите описание изображения здесь

См. Jsocket . Сам не пользовался. Прошло более 3 лет с момента последнего обновления (по состоянию на 26.06.2014).

Решение, которое вы действительно ищете, - это веб-сокеты. Тем не менее, в проекте Chrome были разработаны некоторые новые технологии, которые являются прямыми TCP-соединениями TCP chromium

Чтобы добиться желаемого, вам нужно будет написать два приложения (например, на Java или Python):

Приложение Bridge, которое находится на клиентском компьютере и может работать как с сокетами TCP / IP, так и с WebSockets. Он будет взаимодействовать с рассматриваемым сокетом TCP / IP.

Серверное приложение (например, JSP / Servlet WAR), которое может взаимодействовать с WebSockets. Он включает по крайней мере одну HTML-страницу (включая код обработки на стороне сервера, если это необходимо), к которой может получить доступ браузер.

Это должно работать так

Примечание 1. Вышеупомянутые шаги являются значительным упрощением и не включают информацию об обработке ошибок и запросах keepAlive в случае, если либо клиент преждевременно отключается, либо серверу необходимо сообщить клиентам, что он завершает работу / перезапускается.

Примечание 2. В зависимости от ваших потребностей эти компоненты можно объединить в один, если рассматриваемый сервер сокетов TCP / IP (с которым связывается мост) находится на том же компьютере, что и серверное приложение.

Я считаю, что веб сокеты придутся ко двору, если вы разрабатываете:
— веб-приложения с интенсивным обменом данными, требовательные к скорости обмена и каналу;
— приложения, следующие стандартам;
— «долгоиграющие» веб-приложения;
— комплексные приложения со множеством различных асинхронных блоков на странице;
— кросс-доменные приложения.

И как это работает?

Очень просто! Как только ваша страница решила, что она хочет открыть веб сокет на сервер, она создает специальный javascript-объект:

А что при этом происходит в сети?

Если сервер поддерживает ВебСокеты, то он отвечает таким образом:

Если браузер это устраивает, то он просто оставляет TCP-соединение открытым. Все — «рукопожатие» совершено, канал обмена данными готов.
Как только одна сторона хочет передать другой какую-то информацию, она отправляет дата-фрейм следующего вида:

Легко понять, что КПД такого протокола стремится к 95%. Это не классический AJAX-запрос, где на каждую фитюльку приходится пересылать несколько килобайт заголовков. Разница будет особенно заметна если делать частый обмен небольшими блоками данных. Скорость обработки так же стремится к скорости чистого TCP-сокета — ведь все уже готово — соединение открыто — всего лишь байты переслать.

Лирическое отступление:
И еще одна вещь, которая меня очень радует - в качестве единственной разрешенной кодировки выбрана UTF-8! Я уже робко надеюсь, что через некоторое время мы уйдем от одного из костылей веба.

С помощью WebSockets так же можно передавать и бинарные данные. Для них используется другой дата-фрейм следующего вида:

Например, самую главную картинку веб-дизайна — прозначный однопиксельный GIF размером 43 байта можно передать так:


Объект размером 160 байт закодируется 2 байтами длины:

Не правда ли, очень элегантно?

Что это нам дает?

Скорость и эффективность

Высокую скорость и эффективность передачи обеспечивает малый размер передаваемых данных, который иногда даже будет помещаться в один TCP-пакет — здесь, конечно, же все зависит от вашей бизнес-логики. (В дата-фрейм можно засунуть и БСЭ, но для такой передачи потребуется чуть больше 1 TCP- пакета. :) ).
Так же учтите, что соединение уже готово — не надо тратить время и трафик на его установление, хендшейки, переговоры.

Стандартность
Время жизни канала
Комплексные веб-приложения
Кросс-доменные приложения

И еще один «камень в ботинке» AJAX-разработчика — проблемы с кросс-доменными приложениями. Да, и для них тоже придумана масса хаков. Помашем им ручкой и смахнем скупую слезу. WebSockets не имеет таких ограничений. Ограничения вводятся не по принципу «из-того-же-источника», а из «разрешенного-источника», и определяются не на клиенте, а на сервере. Думаю, внимательные уже заметили новый заголовок Origin. Через него передается информация откуда хотят подключиться к вашему websocket-у. Если этот адрес вас не устраивает, то вы отказываете в соединение.
Все! Конец кросс-доменной зопяной боли!

А руками пощупать можно?

Светлое будущее

И когда же оно настанет? На самом деле очень скоро. Гугл в очередной раз дал «волшебного пендаля» всей веб-индустрии, и все зашевелились. Вы удивитесь, но тут же люди вспомнили, что в багзилле фаерфокса уже год(!) висит задача на эту тему. В Хроме все изменения сделаны в WebKit — а значит очень скоро появится поддержка в Safari. Скоро подтянутся и остальные браузеры.

А если нельзя, но очень хочется?

На этот случай придуман временный заменитель — библиотечка web-socket-js с помощью флеша эмулирующая веб-сокеты. К сожалению, у нее есть небольшие проблемы с проксями и кросс-доменной работой. Но в качестве временного решения ее стоит опробовать.

Выводы

На мой взгляд, как только люди распробуют, эта технология получить очень широкое распространение. К весне-лету мы получим массу сайтов с ней. И как в свое время несколько лет прошло «под звездой AJAX», так и здесь год-другой мы будем слышать отзывы о внедрении WebSockets повсеместно.

I am going to develop an instant messaging application that runs in the browser.

What browsers support the WebSocket API?

2,787 3 3 gold badges 15 15 silver badges 3 3 bronze badges @meagar - I disagree. I think it should be protected as a wiki to prevent new answers, but preserve the current helpful answer. This question has over 100,000 views. Comments disabled on deleted / locked posts / reviews | Show 6 more comments

1 Answer 1

Client side

  • Hixie-75:
  • Chrome 4.0 + 5.0
  • Safari 5.0.0
  • HyBi-00/Hixie-76:
  • Chrome 6.0 - 13.0
  • Safari 5.0.2 + 5.1
  • iOS 4.2 + iOS 5
  • Firefox 4.0 - support for WebSockets disabled. To enable it see here.
  • Opera 11 - with support disabled. To enable it see here.
  • HyBi-07+:
  • Chrome 14.0
  • Firefox 6.0 - prefixed: MozWebSocket
  • IE 9 - via downloadable Silverlight extension
  • HyBi-10:
  • Chrome 14.0 + 15.0
  • Firefox 7.0 + 8.0 + 9.0 + 10.0 - prefixed: MozWebSocket
  • IE 10 (from Windows 8 developer preview)
  • HyBi-17/RFC 6455
  • Chrome 16
  • Firefox 11
  • Opera 12.10 / Opera Mobile 12.1

Any browser with Flash can support WebSocket using the web-socket-js shim/polyfill.

See caniuse for the current status of WebSockets support in desktop and mobile browsers.

See the test reports from the WS testsuite included in Autobahn WebSockets for feature/protocol conformance tests.

Server side

It depends on which language you use.

Some other Java implementations:

    : Socket.io also has serverside ports for Python, Java, Google GO, Rack : sockjs also has serverside ports for Python, Java, Erlang and Lua - Pure JavaScript Client & Server implementation of HyBi-10.

Vert.x (also known as Node.x) : A node like polyglot implementation running on a Java 7 JVM and based on Netty with :

DotCloud cloud platform supports Websockets, and Java (Jetty Servlet Container), NodeJS, Python, Ruby, PHP and Perl programming languages.

Какие браузеры поддерживают API WebSocket ?

1 ответ

Клиентская сторона

  • Хикси-75:
    • Chrome 4.0 + 5.0
    • Safari 5.0.0
    • Chrome 6.0 - 13.0
    • Safari 5.0.2 + 5.1
    • iOS 4.2 + iOS 5
    • Firefox 4.0 - отключена поддержка веб-сокетов . Чтобы включить его, см. Здесь .
    • Opera 11 - с поддержка отключена . Чтобы включить его, см. Здесь .
    • Chrome 14.0
    • Firefox 6.0 - с префиксом: MozWebSocket
    • IE 9 - через загружаемое расширение Silverlight
    • Chrome 14.0 + 15.0
    • Firefox 7.0 + 8.0 + 9.0 + 10.0 - с префиксом: MozWebSocket
    • IE 10 (из предварительного просмотра Windows 8 для разработчиков)
    • Chrome 16
    • Firefox 11
    • Opera 12.10 /Opera Mobile 12.1

    Любой браузер с Flash может поддерживать WebSocket с помощью web-socket-js shim /polyfill.

    См. caniuse , чтобы узнать текущее состояние поддержки WebSockets в настольных и мобильных браузерах.

    См. отчеты о тестировании из комплекта тестов WS, включенного в Автобан WebSockets для проверки соответствия функций /протоколов.

    Серверная часть

    Это зависит от того, какой язык вы используете.

    Некоторые другие реализации Java:

    • Kaazing Gateway
    • jWebscoket
    • Netty
    • xLightWeb
    • Webbit
    • Атмосфера
    • Grizzly
    • Apache ActiveMQ V 5.6 supports RFC6455
    • Apache Camel V 2.10 supports RFC6455
    • JBoss HornetQ
    • pywebsockets
    • websockify
    • gevent-websocket , gevent-socketio и фляги-розетки на основании бывшего
    • Автобан
    • Торнадо
    • Socket.io : Socket.io также имеет серверные порты для Python, Java, Google GO, Rack
    • sockjs : у sockjs также есть серверные порты для Python, Java, Erlang и Lua
    • WebSocket-Node - клиент Pure JavaScript & Серверная реализация HyBi-10.

    Vert.x (также известный как Node.x) : узел, подобный реализации полиглота, работающей на Java 7 JVM и на основе Netty с:

    DotCloud облачная платформа поддерживает веб-сокеты и Java (контейнер сервлетов Jetty), NodeJS, Python, Ruby, PHP и языки программирования Perl.

    Читайте также: