Будет ли HTML5 разрешать веб-приложениям создавать одноранговые HTTP-соединения?

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

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

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

Ответ 1

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

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

Полную спецификацию можно найти на http://dev.w3.org/html5/websockets/

JRH

EDIT: с конкретной ссылкой на одноранговые соединения, проверьте эти ссылки:

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

JRH

Ответ 2

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

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

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


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

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

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

Ответ 3

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

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

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

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

Ответ 4

Да, наконец.

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

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

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

Полная поддержка: Edge 14, Firefox 22, Firefox Android 55
Частичная поддержка: Android Browser 56, Chrome 20, Chrome Android 29, Edge 12, Firefox 17, Opera 18, Opera Android 20, Opera Mobile 12, UC Browser Android 11.4
Будущая поддержка (Q3 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 году.

Ответ 5

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

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

EDIT: обратите внимание, что все это выходит за рамки HTML5 (все эти вещи были частью HTML5, но были разделены на собственные спецификации)