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

97

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

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

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

Теги:

6 ответов

108
Лучший ответ

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

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

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

JRH

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

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

JRH

  • 45
    +1 => «Вместо умных догадок вот ответный ответ»
  • 2
    Разрешает ли WebSocket подключаться к ЛЮБОМУ хосту? Я считаю, что спецификация говорит только сервер.
Показать ещё 4 комментария
27

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

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

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


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

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

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

  • 0
    Как вы думаете, сколько времени пройдет, прежде чем это будет в WebKit?
  • 0
    Я не знаю. Я предлагаю проверить с Эриксоном. Ссылка в моем ответе. Их форумы могут иметь информацию о том, когда это будет.
Показать ещё 1 комментарий
3

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

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

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

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

  • 0
    P2P не клиент-сервер; первый перемещает трафик между одноранговыми узлами, последний перемещает его через сервер одному или нескольким клиентам. Основным преимуществом P2P является то, что сервер может выступать в качестве сваха, в то время как большой трафик проходит между клиентами (что является благом для конфиденциальности и пропускной способности).
1

Да, наконец.

На момент написания этой статьи (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 году.

0

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

0

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

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

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

Ещё вопросы

Сообщество Overcoder
Наверх
Меню