Чи дозволить HTML5 веб-програмам здійснювати однорангові HTTP-з'єднання?


100

Чи можливо створити веб-додаток, який за допомогою центрального сервера міг би створити прямі зв’язки з іншими користувачами того ж веб-додатка? Я уявляю процес, схожий на пробивання отворів UDP.

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

ПРИМІТКА: аплети Java не враховуються. Мене цікавлять лише стандартні технології браузера.


Відповіді:


109

Замість розумних здогадок, ось усвідомлена відповідь:

HTML 5 планує дозволити однорангові зв'язки з Javascript, але ці з'єднання НЕ будуть RAW TCP.

Повний опис можна знайти на веб- сайті http://dev.w3.org/html5/websockets/

jrh

EDIT: з конкретним посиланням на зв'язки однорангових, перевірте ці посилання:

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

jrh


45
+1 => "Замість розумних здогадок, ось усвідомлена відповідь"
Ionuț G. Stan

2
Чи дозволяє WebSocket підключатися до будь-якого хоста? Я вважаю, що специфікація каже лише сервер.
гегемон

4
Веб-сокети вже не є частиною HTML5, а окремою специфікацією.
Сергій Ілинський,

8
WebSockets не є одноранговими - вони все ще є клієнтом на сервері, а браузери не реалізують половину сервера.
Альнітак

4
webSockets не роблять одночасно, але для цього призначена більш нова специфікація, WebRTC.
Ерік Мілл

29

ОНОВЛЕННЯ 17.10.2012: Ця функціональність зараз існує в Chrome Stable v22. Щоб використовувати цю функціональність у Chrome, потрібно ввімкнути два прапори в хромі: // flags:

  • Увімкнути MediaStream
  • Увімкнути PeerConnection

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


ОНОВЛЕННЯ: Інженери в лабораторіях Ericcson мають доказ концепції в побудові WebKit, що робить розмовне відео HTML Peer to Peer на розгляд .

Вони демонструють у своєму блозі технологію в дії, а також схеми та пояснення того, як технологія буде працювати.

Вони працюють над тим, щоб це стабілізувалося і було прийнято до сховища WebKit.


Скільки часу, як ви вважаєте, це пройде до того, як це стане в WebKit?
Алістер

Я не знаю. Я пропоную перевіритись з Еріксоном. Посилання є у моїй відповіді. На їхніх форумах може бути інформація про те, коли це буде.
jmort253

Вимагати спеціальних налаштувань конфігурації / прапорця браузера - це не те саме, що є частиною робочої специфікації веб-стандарту. Якщо це не в HTML5, WebSockets або WebRTC поза межами коробки, то ви не можете зробити одноранговий без хакі. На щастя, схоже, WebRTC рухається в правильному напрямку.
Beejor

11

Так, нарешті.

Станом на це написання (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 року.


4

Є кілька причин, чому це було б складно:

  1. Брандмауери (навіть просто звичайні NAT) ускладнювали б таке з'єднання на набагато нижчому протокольному шарі, ніж навіть HTTP. З моєю шапкою безпеки ІТ це здається чудовим способом відкрити довільні порти на машині, просто відвідавши веб-сайт, - і це буде агресивно заблоковано практично всіма корпоративними ІТ-системами.
  2. HTTP по суті є протоколом клієнт-сервер. Хоча моделювати дуплексні комунікації досить просто за допомогою тривалого опитування (як і пару інших методик), це не особливо ефективно.
  3. Це відкриє велику діру для атак XSS.

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

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


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

0

Я другий harshath.jr: ви могли б дуже добре мати сервер, що виконує функції каталогів (викриваючи "походження" кожного підключеного агента; походження є схемою + хост + порт, як у проекті походження abarth , при цьому схема є або "ws" або "wss"). Потім ви можете ініціювати однорангові з’єднання WebSocket; СОП опрацьовується завдяки CORS . Звичайно, це означає, що кожен агент (тобто браузер) повинен був вбудувати власний сервер WebSocket (à la Opera Unite).

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

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


Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.