Позволит ли HTML5 веб-приложениям устанавливать одноранговые HTTP-соединения? - PullRequest
98 голосов
/ 23 июня 2009

Можно ли создать веб-приложение, которое с помощью центрального сервера могло бы создавать прямые соединения с другими пользователями того же веб-приложения? Я представляю себе процесс, похожий на пробивание отверстий UDP.

Я читал о новом API WebSockets в HTML5, но, похоже, вы должны инициировать соединение с WS-совместимым сервером, прежде чем может начаться полностью дуплексное соединение. Я также думаю о процессе установления прямых соединений между клиентами, когда сервер только участвует в первоначальном рукопожатии.

ПРИМЕЧАНИЕ. Java-апплеты не учитываются. Меня интересуют только стандартные браузерные технологии.

Ответы [ 6 ]

107 голосов
/ 23 июня 2009

Вместо умных догадок вот ответ:

HTML 5 планирует разрешить одноранговые соединения из javascript, но эти соединения НЕ БУДУТ RAW TCP.

Полная спецификация может быть найдена в http://dev.w3.org/html5/websockets/

JRH

РЕДАКТИРОВАТЬ: с конкретной ссылкой на одноранговые соединения, проверьте эти ссылки:

Важно отметить, что возможности все еще обсуждаются. Будет приятно иметь возможность создавать веб-приложения "локальный чат":)

JRH

29 голосов
/ 03 февраля 2011

ОБНОВЛЕНИЕ 17.10.2012: Эта функциональность теперь существует в Chrome Stable v22. Чтобы использовать эту функцию в Chrome, необходимо включить два флага в chrome: // flags:

  • Включить MediaStream
  • Включить PeerConnection

Затем вы можете посетить AppRTC Demo Page , чтобы опробовать демо. См. WebRTC - Запуск страницы Demos для получения более подробных инструкций по настройке Chrome для использования одноранговой функциональности и включению захвата устройства.


ОБНОВЛЕНИЕ: Инженеры из Ericcson Labs имеют доказательство своей концепции в сборке WebKit, которая делает HTML5 одноранговое разговорное видео .

В своем блоге они демонстрируют технологию в действии, а также диаграммы и пояснения о том, как технология будет работать.

Они работают над тем, чтобы это стабилизировать и зафиксировать в репозитории WebKit.

7 голосов
/ 19 августа 2017

Да, наконец.

На момент написания статьи (2017 г.) WebRTC в настоящее время является стандартной частью большинства современных браузеров (около 70% используемых) и допускает потоковую передачу мультимедиа, одноранговую и дырокол.

Документы, примеры кода и примеры использования WebRTC можно найти по адресу html5rocks.com .

Согласно caniuse.com и html5rocks.com , следующие браузеры поддерживают WebRTC:

Полная поддержка: Edge 14, Firefox 22, Firefox Android 55
Частичная поддержка: Браузер Android 56, Chrome 20, Chrome Android 29, Edge 12, Firefox 17, Opera 18, Opera Android 20, Opera Mobile 12, UC Browser Android 11.4
Будущая поддержка (3 квартал 2017 года): Chrome для iOS 11, Safari 11 для iOS 11 и OS X 10.11
Нет поддержки: IE, IE Mobile, Opera Mini

Скорость насыщения WebRTC ограничена на устройствах Apple, поскольку Safari 11 еще не выпущен и требует iOS 11 или OS X 10.11. Несмотря на прогнозируемые тенденции обновления, WebRTC должен быть доступен примерно на 75% устройств iOS к 2018 году и на 100% к 2020 году.

4 голосов
/ 23 июня 2009

Есть несколько причин, почему это было бы сложно:

  1. Брандмауэры (даже простые NAT) затрудняют такой тип соединения на гораздо более низком уровне протокола, чем даже HTTP. С моей шляпой в области ИТ-безопасности это кажется прекрасным способом открыть произвольные порты на машине, просто посетив веб-сайт - и поэтому он будет активно блокироваться практически всеми корпоративными ИТ-системами.
  2. HTTP по своей сути является клиент-серверным протоколом. Хотя моделирование дуплексной связи с использованием длинного опроса (а также нескольких других методов) достаточно просто, оно не особенно эффективно.
  3. Это откроет большую дыру для атак XSS.

WebSockets предназначен для решения второй из этих проблем, но (сознательно, я ожидаю), а не двух других. Когда они говорят об одноранговой связи в спецификации HTML5, они говорят о полнодуплексной связи между сервером и клиентом, а не между одним клиентом и другим.

Однако было бы просто реализовать надлежащий сетевой стек поверх веб-сокетов - при условии, что все взаимодействие все равно должно осуществляться через сервер. Я видел, как это было сделано с помощью длинного опроса (мой друг из Uni написал полный стек TCP / IP с использованием длинного опроса).

0 голосов
/ 23 августа 2010

Целью веб-сокетов было решение проблем с брандмауэрами и прокси http://www.kaazing.org/confluence/display/KAAZING/What+is+an+HTML+5+WebSocket

0 голосов
/ 23 июня 2009

Я второй harshath.jr: у вас вполне может быть сервер, выступающий в качестве каталога (отображающий «происхождение» каждого подключенного агента; источником является схема + хост + порт как в draft-abarth-origin со схемой "ws" или "wss"). Затем вы можете инициировать одноранговые соединения WebSocket; SOP прорабатывается благодаря CORS . Конечно, это означает, что каждый агент (то есть браузер) должен был бы встроить свой собственный сервер WebSocket (например, Opera Unite).

В то же время, сделайте это XMPP / IRC / etc.-way: нет однорангового соединения, но есть соединения WebSocket с центральным сервером (или сетью!) Для передачи сообщений подключенным агентам (в конце концов, используя определенный WebSocket "подпротокол")

РЕДАКТИРОВАТЬ: обратите внимание, что все это на самом деле выходит за рамки HTML5 (все эти вещи когда-то были частью HTML5, но были разделены на их собственные спецификации)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...