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

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

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

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

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


person Răzvan Flavius Panda    schedule 11.08.2011    source источник
comment
Одноранговое соединение WebRTC без сервера сигнализации: блог. printf.net/articles/2013/05/17/   -  person danijar    schedule 07.11.2013
comment
Также см. PeerJS, проект, пользующийся успехом в этой области, который имеет относительно приличный поддержка браузера.   -  person Boaz - CorporateShillExchange    schedule 24.03.2015
comment
Самый простой способ - использовать http://httprelay.io и вызовы AJAX. Это быстро, менее 50 мс.   -  person Jonas    schedule 24.04.2017


Ответы (3)


Здесь, в Stackoverflow, есть несколько тем о P2P-соединениях в браузерах:

  1. Разрешит ли HTML5 веб-приложениям делать одноранговые одноранговые HTTP-соединения?
  2. Какие методы доступны для P2P в браузере? < / а>
  3. Поддерживает ли HTML5 одноранговую связь (и не только WebSockets)
  4. Могут ли веб-узлы HTML5 подключать 2 клиента (браузеры ) напрямую без использования сервера (P2P)
  5. Можно ли создать одноранговый узел одноранговые соединения в веб-браузере?
  6. Возможности однорангового видео в HTML 5?
  7. Реализован ли 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 видео и аудио, и его можно протестировать с помощью нескольких демонстраций. Передача данных приложения, таких как _3 _ / _ 4 _ / ..., до сих пор не поддерживается.

Начиная с 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: DataChannels все еще экспериментальны, но доступны в текущих версиях Chrome и Firefox:

person Dennis    schedule 28.10.2011
comment
Наступил 2014 год. Можете ли вы обновить свой отличный пост недавним прогрессом? - person myroslav; 30.04.2014
comment
@myroslav webrtc.org/interop - хорошее место для начала. К настоящему времени Firefox, Chrome и Opera полностью поддерживают и могут взаимодействовать с соответствующими адаптерами. - person msemelman; 06.05.2014
comment
Не могли бы вы обновить свой отличный пост недавним прогрессом! - person Abderrahim; 30.08.2016
comment
Скоро сделаю! - person Dennis; 30.08.2016
comment
здесь, в Австралии, 2016 год. Можно ли получить последние ссылки для одноранговой связи в браузере? - person Ganesh Krishnan; 13.09.2016
comment
А как насчет того обновления? - person obskyr; 14.11.2016
comment
По состоянию на 2017 год WebRTC является стандартной частью большинства современных браузеров. См. stackoverflow.com/a/45765379/3672465 - person Beejor; 19.08.2017
comment
Подобные ответы, которые в основном представляют собой список ссылок, трудно разобрать, и они не очень полезны. - person xdhmoore; 04.02.2021

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

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

person Emil Ivanov    schedule 11.08.2011
comment
Вы уверены, что WebSocket не разрешает прямой p2p между двумя браузерами? из того, что написано в Википедии, похоже, что может: WebSocket - это технология, обеспечивающая двунаправленные полнодуплексные каналы связи через один сокет протокола управления передачей (TCP). Он разработан для реализации в веб-браузерах и веб-серверах, но может использоваться любым клиентским или серверным приложением. - person Răzvan Flavius Panda; 11.08.2011
comment
Проблема решена, если у вас не может быть браузер LISTEN / в качестве сервера. Вы сможете общаться с любым сервером в полнодуплексном режиме, но ваши потребители не могут стать серверами. Вдобавок вы столкнетесь с миллионом проблем с брандмауэрами, если сможете. Решение Эмиля сработает лучше, хотя и медленнее. - person ghayes; 11.08.2011
comment
Технически веб-сокеты можно использовать где угодно. Но в браузерах из-за ограничений безопасности этого не произойдет. Гайес объяснил это. Также обратите внимание, что это решение, вероятно, будет быстрее, поскольку обычно серверы размещаются в местах с огромной пропускной способностью, поэтому ваш сервер будет нормально обрабатывать 100 клиентов, а при использовании реального p2p вы очень сильно перегрузите соединение пользователей. быстро. - person Emil Ivanov; 11.08.2011
comment
@ Эмиль Иванов: Это правда, что вы говорите, но если это просто соединение 1 к 1, оно должно быть быстрее. - person Răzvan Flavius Panda; 11.08.2011

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

person Eugene Mayevski 'Callback    schedule 11.08.2011