Wie kann ich eine Browser-zu-Browser-Verbindung (Peer-to-Peer) herstellen? [geschlossen]


83

Wie kann ich eine Website mit schreiben HTML5 , CSS und JavaScript auf Client - Seite , die ermöglicht , direkte TCP / IP - Verbindung zwischen dem Client - Browser , sobald die Seite geladen wird .

Ich muss dies tun, um die Latenz zu verringern, da die Site erfordert, dass die Eingaben von einem der Benutzer so schnell wie möglich an den anderen Benutzer übertragen werden, sodass das Senden von Daten von Client A an Server und dann an Client B nicht gut ist Möglichkeit.

Ich habe frühere Beiträge zu diesem Thema gelesen, aber es waren keine funktionierenden Lösungen / Beispiele verfügbar, die ich finden konnte. Nach dem, was ich gelesen habe, kann die direkte Verbindung zwischen Clients mit Plugins wie Silverlight, Java oder Flash hergestellt werden.

Gibt es eine Lösung, die keine Plugins erfordert? Ich möchte nur JavaScript verwenden.


3
WebRTC-Peer-Verbindung ohne Signalisierungsserver: blog.printf.net/articles/2013/05/17/…
danijar

1
Siehe auch PeerJS , ein Projekt mit einem gewissen Zug in diesem Bereich, die relativ anständig hat Browser - Unterstützung .
Boaz

1
Am einfachsten ist es, httprelay.io- und AJAX-Aufrufe zu verwenden. Es ist schnell, weniger als 50 ms.
Jonas

Antworten:


126

Hier auf Stackoverflow finden Sie verschiedene Themen zu P2P-Verbindungen in Browsern:

  1. Ermöglicht HTML5 Web-Apps, Peer-to-Peer-HTTP-Verbindungen herzustellen?
  2. Welche Techniken stehen für P2P im Browser zur Verfügung?
  3. Unterstützt HTML5 Peer-to-Peer (und nicht nur WebSockets)
  4. Können HTML5-Websockets 2 Clients (Browser) direkt verbinden, ohne einen Server (P2P) zu verwenden?
  5. Ist es möglich, Peer-to-Peer-Verbindungen in einem Webbrowser herzustellen?
  6. Ermöglichen Websockets die Kommunikation mit P2P (Browser zu Browser)?
  7. HTML 5 Peer-to-Peer-Videomöglichkeiten?
  8. Ist WebRTC bereits in einem Browser implementiert?

Wie in den meisten Themen erwähnt, hatten beide HTML5-Arbeitsentwürfe von 2008 einen Abschnitt "Peer-to-Peer-Verbindungen":

Seit dem W3C-Arbeitsentwurf vom 12. Februar 2009 ist der Abschnitt "Peer-to-Peer-Verbindungen" verschwunden. Diese P2P-Verbindung ist jedoch nicht unterbrochen. Es ist wieder unter dem Namen PeerConnection in den WebRTC-Spezifikationen (Real-Time Communications) enthalten:

Seit dem 31. Oktober 2011 ist der Entwurf des W3C-Herausgebers ein offizieller Arbeitsentwurf:

Die einzige Implementierung von PeerConnection (UDP-basiert) ist das modifizierte WebKit der Ericsson Labs (Mai 2011), das recht gut funktioniert. Einige Patches sind jetzt in WebKit (Oktober 2011 - siehe Updates unten!):

Darüber hinaus ist die WebRTC-Initiative ein Projekt von Google, Mozilla und Opera. Daher setzen sie die Spezifikation für PeerConnection fort:

Wahrscheinlich wird Chrome (verwendet WebKit) der erste große Browser sein, der WebRTC mit PeerConnection unterstützt:

Seit dem 18. Januar 2012 unterstützt Chrome auch WebRTC . Es kann im Dev-Kanal (Windows, OSX, Linux) und im Canary-Build (Windows und OSX) verwendet werden, indem es unter aktiviert wirdchrome://flags . Es unterstützt nur MediaStreamVideo und Audio und kann mit mehreren Demos getestet werden . Das Übertragen von Anwendungsdaten wie String/ ArrayBuffer/ ... wird bisher nicht unterstützt.

Seit dem 16. März 2012 trennt der Entwurf des WebRTC-Editors eine "Peer-to-Peer-Daten-API" zum Senden und Empfangen generischer Anwendungsdaten ( String, ArrayBufferund Blob). Chromium möchte die Daten-API bald (10. April 2012) implementieren .

Am 3. April veröffentlichte Mozilla auch ein erstes Arbeitsbeispiel zu WebRTC für Firefox .

DataChannel ist für Version 25 von Chrome hinter einer Flagge geplant und kann in Firefox Nightly / Aurora (12. Dezember 2012) getestet werden:

2018: DataChannels sind noch experimentell, aber in aktuellen Versionen von Chrome und Firefox verfügbar:


11
Es ist 2014 hier. Können Sie Ihren ausgezeichneten Beitrag mit den jüngsten Fortschritten aktualisieren?
Myroslav

1
@myroslav webrtc.org/interop ist ein guter Anfang. Inzwischen bieten Firefox, Chrome und Opera volle Unterstützung und können mit geeigneten Adaptern zusammenarbeiten.
Msemelman

1
Ich werde es bald tun!
Dennis

2
Es ist 2016 hier in Australien. Können wir die neuesten Links für Browser Peer-to-Peer haben?
Ganesh Krishnan

1
Ja, wie wäre es mit diesem Update?
Obskyr

6

Ich muss Sie enttäuschen - dies ist derzeit nicht nur mit JavaScript möglich. Websockets (und Socket.IO) ermöglichen eine Socket-ähnliche Verbindung zwischen dem Client und dem Server, jedoch nicht zwischen Clients. Ihre Option ist ein Plugin - sei es Flash, Silverlight, Java oder maßgeschneidert.

Was Sie tun können, ist, socket.io zu verwenden und dies zu emulieren, indem Sie einen einfachen Proxyserver schreiben.


Sind Sie sicher, dass WebSocket kein direktes P2P zwischen zwei Browsern zulässt? Nach den Aussagen auf Wikipedia klingt es so: "WebSocket ist eine Technologie, die bidirektionale Vollduplex-Kommunikationskanäle über einen einzigen TCP-Socket (Transmission Control Protocol) ermöglicht. Sie wurde für die Implementierung in Webbrowsern und im Internet entwickelt Server, aber es kann von jedem Client oder jeder Serveranwendung verwendet werden. "
Răzvan Flavius ​​Panda

5
Das Problem wurde behoben, wenn Sie keinen Browser haben LISTEN/ nicht als Server fungieren können. Sie können mit jedem Server im Vollduplex-Modus kommunizieren, aber Ihre Kunden können keine Server werden. Außerdem werden Sie auf eine Million Probleme mit Firewalls stoßen, wenn Sie könnten. Emils Lösung wird besser funktionieren, wenn auch langsamer.
Ghayes

Technisch gesehen können Websockets überall verwendet werden. In Browsern ist dies aus Sicherheitsgründen jedoch nicht der Fall. Ghayes erklärte es. Beachten Sie auch, dass diese Lösung wahrscheinlich schneller sein wird , da Server normalerweise an Orten mit großer Bandbreitenkapazität platziert werden, sodass Ihr Server 100 Clients problemlos verarbeiten kann, während Sie mit echtem P2P die Verbindung des Benutzers sehr schnell überlasten.
Emil Ivanov

@Emil Ivanov: Es ist wahr, was Sie sagen, aber wenn es nur eine 1 zu 1-Verbindung ist, sollte es schneller sein.
Răzvan Flavius ​​Panda

3

Ich möchte Ihre Aufmerksamkeit auf die Tatsache lenken, dass sich die meisten Benutzer heutzutage hinter NAT oder Firewalls befinden und dies bedeutet, dass Sie keine eingehende Verbindung zum Computer des Benutzers herstellen können. Ihre Idee würde also (wenn überhaupt möglich) nur in einigen Fällen funktionieren und Ihre Lösung komplexer machen. Daher ist ein Client-Server-System mit möglicherweise dauerhafter Verbindung (über websockets oder socket.io) eine bessere Option.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.