Как я могу установить соединение между браузером и браузером (одноранговое соединение)? [закрыто]

84

Как я могу написать веб-сайт с использованием HTML5 , CSS и JavaScript на стороне клиента, который позволит прямое соединение TCP / IP между клиентскими браузерами после загрузки страницы .

Мне нужно сделать это, чтобы уменьшить задержку, поскольку сайт потребует, чтобы ввод от одного из пользователей был передан другому пользователю как можно скорее, поэтому отправка данных с клиента A на сервер, а затем на клиент B не является хорошей вариант.

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

Есть ли какое-то решение, для которого не требуются плагины? Я хотел бы использовать только JavaScript.

Рэзван Флавиус Панда
источник
3
Одноранговое соединение WebRTC без сервера сигнализации: blog.printf.net/articles/2013/05/17/…
danijar
1
Также см. PeerJS , проект, имеющий определенную популярность в этой области, который имеет относительно приличную поддержку браузера .
Boaz
1
Самый простой способ - использовать вызовы httprelay.io и AJAX. Это быстро, менее 50 мс.
Jonas

Ответы:

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 г. был раздел «Одноранговые соединения»:

Начиная с рабочего проекта 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 . Его можно использовать в канале разработки (Windows, OSX, Linux) и в сборке Canary (Windows и OSX) , включив его вchrome://flags . Он поддерживает только MediaStreamвидео и аудио и может быть протестирован с несколькими демонстрациями . Перенос данных приложения, например String/ArrayBuffer / ..., до сих пор не поддерживается.

С 16 марта 2012 г. черновик редактора WebRTC разделяет «API одноранговых данных» для отправки и получения общих данных приложения ( String, ArrayBufferи Blob). Chromium планирует реализовать API данных в ближайшее время (10 апреля 2012 г.).

3 апреля Mozilla опубликовала первый рабочий пример WebRTC и для Firefox .

DataChannel планируется для версии 25 Chrome, за флагом, между тем он может быть протестирован в Firefox Nightly / Aurora (12 декабря 2012 г.):

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

Деннис
источник
11
Наступил 2014 год. Можете ли вы обновить свой отличный пост недавним прогрессом?
myroslav
1
@myroslav webrtc.org/interop - хорошее место для начала. К настоящему времени Firefox, Chrome и Opera полностью поддерживают и могут взаимодействовать с соответствующими адаптерами.
msemelman 05
1
Скоро сделаю!
Деннис
2
Сейчас в Австралии 2016 год. Можно ли получить последние ссылки для одноранговой связи в браузере?
Ганеш Кришнан
1
А как насчет того обновления?
obskyr
6

Придется вас разочаровать - в настоящее время это невозможно с использованием только JavaScript. Веб-сокеты (и Socket.IO) допускают соединение типа сокета между клиентом и сервером, но не между клиентами. Ваш вариант - плагин - будь то Flash, Silverlight, Java или индивидуальный.

Что вы можете сделать, так это использовать socket.io и эмулировать это, написав простой прокси-сервер.

Эмиль Иванов
источник
Вы уверены, что WebSocket не разрешает прямой p2p между 2 браузерами? из того, что написано в Википедии, похоже, что может: «WebSocket - это технология, обеспечивающая двунаправленные полнодуплексные каналы связи через один сокет протокола управления передачей (TCP). Она предназначена для реализации в веб-браузерах и в Интернете. серверов, но его может использовать любое клиентское или серверное приложение ».
Рэзван Флавиус Панда
5
Проблема решена, если у вас не может быть браузера LISTEN/ работать в качестве сервера. Вы сможете общаться с любым сервером в полнодуплексном режиме, но ваши потребители не могут стать серверами. Вдобавок вы столкнетесь с миллионом проблем с брандмауэрами, если сможете. Решение Эмиля сработает лучше, хотя и медленнее.
ghayes
Технически веб-сокеты можно использовать где угодно. Но в браузерах из-за ограничений безопасности этого не произойдет. Гайес объяснил это. Также обратите внимание, что это решение, вероятно, будет быстрее , поскольку обычно серверы размещаются в местах с огромной пропускной способностью, поэтому ваш сервер будет нормально обрабатывать 100 клиентов, а при использовании реального p2p вы очень быстро заполните соединение пользователей.
Эмиль Иванов
@ Эмиль Иванов: Это правда, что вы говорите, но если это просто соединение 1 к 1, оно должно быть быстрее.
Рэзван Флавиус Панда
3

Я хотел бы обратить ваше внимание на тот факт, что большинство пользователей в настоящее время находятся за NAT или межсетевыми экранами, а это означает, что вы не можете легко установить входящее соединение с компьютером пользователя. Таким образом, ваша идея (если вообще возможно) будет работать только в некоторых случаях и внесет дополнительную сложность в ваше решение. Таким образом, система клиент-сервер с возможным постоянным подключением (с использованием веб-сокетов или socket.io) является лучшим вариантом.

Обратный звонок Евгения Маевского
источник