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

StackOverflow https://stackoverflow.com/questions/1032006

  •  06-07-2019
  •  | 
  •  

Вопрос

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

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

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

Это было полезно?

Решение

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

HTML 5 планирует разрешить одноранговые соединения с помощью javascript, но эти соединения НЕ БУДУТ ИСХОДНЫМИ TCP.

С полной спецификацией можно ознакомиться по адресу http://dev.w3.org/html5/websockets/

jrh

Редактировать:с конкретной ссылкой на одноранговые соединения ознакомьтесь с этими ссылками:

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

jrh

Другие советы

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

  • Включить медиапоток
  • Включить PeerConnection (одноранговое подключение)

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


Обновить: У инженеров Ericcson Labs есть доказательство концепции в сборке WebKit, которая делает HTML5 Peer-to-Peer Разговорное Видео.

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

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

Да, наконец.

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

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

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

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

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

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

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

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

    Лицензировано под: CC-BY-SA с атрибуция
    Не связан с StackOverflow
    scroll top