Какие браузеры поддерживают websocket
Я пробовал, 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 comments1 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.
Читайте также: