Як я можу підключити браузер до браузера (одноранговий)? [зачинено]


83

Як я можу написати веб-сайт, використовуючи HTML5 , CSS та JavaScript на стороні клієнта, що дозволить пряме з'єднання tcp / ip між браузерами клієнта після завантаження сторінки .

Мені потрібно зробити це, щоб зменшити затримку, оскільки сайт вимагатиме, щоб вхідні дані одного з користувачів якнайшвидше передавалися іншому користувачеві, тому надсилання даних з клієнта A на сервер, а потім на клієнта B є поганим варіант.

Я читав попередні дописи на цю тему, але робочих рішень / прикладів, які я міг знайти, не було. З того, що я прочитав, прямий зв’язок між клієнтами можна встановити за допомогою таких плагінів, як Silverlight, Java або Flash.

Чи існує якесь рішення, яке не потребує плагінів? Я хотів би використовувати лише JavaScript.


3
WebRTC однорангове з’єднання без сервера передачі сигналів: blog.printf.net/articles/2013/05/17/…
danijar

1
Також див. PeerJS , проект із певною тягою в цій галузі, який має відносно пристойну підтримку браузера .
Боаз,

1
Найпростіший спосіб - використовувати виклики httprelay.io та AJAX. Це швидко, менше 50 мс.
Йонас,

Відповіді:


126

Ось на Stackoverflow кілька тем про P2P-з'єднання у браузерах:

  1. Чи дозволить HTML5 веб-програмам встановлювати однорангові HTTP-з'єднання?
  2. Які методи доступні для виконання P2P у браузері?
  3. Чи підтримує HTML5 рівноправний (і не лише WebSockets)
  4. Чи може веб-розетка HTML5 підключити 2 клієнти (браузери) безпосередньо без використання сервера (P2P)
  5. Чи можна створити однорангові з'єднання у веб-браузері?
  6. Чи дозволяють веб-сокети спілкування через p2p (від браузера до браузера)?
  7. HTML 5 однорангові можливості відео?
  8. Чи реалізовано WebRTC в будь-якому браузері?

Як згадувалось у більшості тем, обидва робочі чернетки HTML5 2008 року мали розділ "Peer-to-peer з'єднання":

З робочого проекту W3C від 12 лютого 2009 р. Розділ "Однорангові з'єднання" зник. Але це з'єднання P2P не зникло. Він повернувся під назвою PeerConnection в специфікаціях WebRTC (Real-Time Communications):

З 31 жовтня 2011 р. Проект редактора W3C є офіційним робочим проектом:

Єдина реалізація PeerConnection (на основі UDP) існує у модифікованому WebKit лабораторіями Ericsson (травень 2011 р.), Який працює досить добре. Деякі виправлення зараз є у WebKit (жовтень 2011 - див. Оновлення нижче!):

Крім того, ініціатива WebRTC - це проект Google, Mozilla та Opera. Таким чином, вони продовжують специфікацію PeerConnection:

Ймовірно, Chrome (використовує WebKit) буде першим основним браузером, що підтримує WebRTC з PeerConnection:

З 18 січня 2012 року Chrome також підтримує WebRTC . Він може використовуватися в каналі Dev (Windows, OSX, Linux) та у збірці Canary (Windows та OSX) , увімкнувши його підchrome://flags . Він підтримує лише MediaStreamвідео та аудіо та може бути протестований за допомогою декількох демонстраційних версій . Передача даних програми, наприклад String/ ArrayBuffer/ ..., дотепер не підтримується.

Починаючи з 16 березня 2012 року, проект редактора WebRTC відокремлює "API однорангових даних" для надсилання та отримання загальних даних додатків ( String, ArrayBufferі Blob). Chromium хоче незабаром застосувати Data API (10 квітня 2012 р.).

3 квітня Mozilla також опублікувала перший робочий приклад на WebRTC для Firefox .

DataChannel планується для версії 25 Chrome, за прапором, тим часом його можна протестувати у Firefox Nightly / Aurora (12 грудня 2012 р.):

2018: канали даних все ще експериментальні, але доступні в поточних версіях Chrome та Firefox:


11
Зараз 2014 рік. Чи можете ви оновити свою чудову публікацію за останнім часом?
Мирослав

1
@myroslav webrtc.org/interop - гарне місце для початку. На даний момент Firefox, Chrome та Opera надають повну підтримку та можуть взаємодіяти з відповідними адаптерами.
msemelman

1
Я зроблю це найближчим часом!
Денніс

2
це 2016 рік тут, в Австралії. Чи можемо ми отримати найновіші посилання для однорангового використання браузера?
Ганеш Кришнан

1
Так, як щодо цього оновлення?
obskyr

6

Мені доведеться вас розчарувати - наразі це неможливо лише за допомогою JavaScript. Веб-сокети (і Socket.IO) дозволяють з'єднувати між клієнтом і сервером схоже на сокет, але не між клієнтами. Вашим варіантом є плагін - будь то Flash, Silverlight, Java або спеціальний.

Що ви можете зробити, це використовувати socket.io і наслідувати це, написавши простий проксі-сервер.


Ви впевнені, що WebSocket не дозволяє прямий p2p між двома браузерами? з того, що сказано у wikipedia, це звучить так, як може: "WebSocket - це технологія, яка забезпечує двонаправлені повнодуплексні канали зв'язку через єдиний сокет протоколу управління передачею (TCP). Вона призначена для впровадження у веб-браузерах та Інтернеті сервери, але його може використовувати будь-який клієнт або серверна програма. "
Резван Флавій Панда

5
Вирішено проблему, якщо ви не можете мати браузер LISTEN/ виступати в ролі сервера. Ви зможете спілкуватися з будь-яким сервером у повному дуплексі, але ваші споживачі не можуть стати серверами. Крім того, ви зможете зіткнутися з мільйоном проблем із брандмауерами, якщо зможете. Рішення Еміля буде працювати краще, хоча і повільніше.
ghayes

Технічно веб-розетки можна використовувати де завгодно. Але у браузерах через обмеження безпеки цього не станеться. гейс це пояснив. Крім того, зауважте, що це рішення, швидше за все, буде швидшим , оскільки зазвичай сервери розміщуються в місцях з величезною пропускною спроможністю, тому ваш сервер чудово обробляє 100 клієнтів, тоді як за допомогою реального p2p ви дуже швидко наситите з'єднання користувачів.
Еміль Іванов

@ Еміл Іванов: Це правда, про що ви говорите, але якщо це просто з'єднання 1 до 1, воно має бути швидшим.
Резван Флавій Панда

3

Я хотів би звернути вашу увагу на те, що сьогодні більшість користувачів перебувають за NAT або брандмауерами, а це означає, що ви не можете легко встановити вхідне з'єднання з комп'ютером користувача. Отже, ваша ідея (якщо це можливо) спрацює лише в деяких випадках і додасть вашому рішенню додаткової складності. Тож система клієнт-сервер з можливим постійним з’єднанням (за допомогою веб-сокетів або socket.io) є кращим варіантом.

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