Ermöglicht HTML5 Web-Apps, Peer-to-Peer-HTTP-Verbindungen herzustellen?

100

Ist es möglich, eine Web-App zu erstellen, die mithilfe eines zentralen Servers direkte Verbindungen zu anderen Benutzern derselben Web-App herstellen kann? Ich stelle mir einen Prozess vor, der dem Stanzen von UDP-Löchern ähnelt.

Ich habe über die neue WebSockets-API in HTML5 gelesen, aber anscheinend müssen Sie die Verbindung mit einem WS-kompatiblen Server herstellen, bevor die Vollduplex-Verbindung beginnen kann. Ich denke mehr über einen Prozess nach, um direkte Verbindungen zwischen Clients herzustellen, wobei ein Server nur am ersten Handshake beteiligt ist.

HINWEIS: Java-Applets zählen nicht. Ich interessiere mich nur für Standard-Browsertechnologien.

Peter O.
quelle

Antworten:

109

Anstelle intelligenter Vermutungen finden Sie hier eine fundierte Antwort:

HTML 5 plant, Peer-to-Peer-Verbindungen von Javascript aus zuzulassen, aber diese Verbindungen werden NICHT RAW-TCP sein.

Die vollständige Spezifikation finden Sie unter http://dev.w3.org/html5/websockets/

jrh

BEARBEITEN: Unter besonderer Bezugnahme auf Peer-to-Peer-Verbindungen sehen Sie sich diese Links an:

Es ist wichtig zu beachten, dass die Fähigkeiten noch verhandelt werden. Es wird schön sein, "lokale Chat" -Web-Apps erstellen zu können :)

jrh

jrharshath
quelle
45
+1 => "Anstelle intelligenter Vermutungen hier eine informierte Antwort"
Ionuț G. Stan
2
Kann WebSocket eine Verbindung zu einem beliebigen Host herstellen? Ich glaube, Spezifikation sagt nur Server.
Hegemon
4
Web Sockets ist nicht mehr Teil von HTML5, sondern eine eigenständige Spezifikation.
Sergey Ilinsky
8
WebSockets sind nicht Peer-to-Peer - sie sind immer noch Client-zu-Server, und Browser implementieren die Serverhälfte nicht.
Alnitak
4
webSockets bieten keine Peer-to-Peer-Spezifikation, aber eine neuere Spezifikation, WebRTC, wurde dafür entwickelt.
Eric Mill
29

UPDATE 17.10.2012: Diese Funktionalität ist jetzt in Chrome Stable v22 vorhanden. Um diese Funktionalität in Chrome nutzen zu können, müssen zwei Flags in Chrome aktiviert sein: // flags:

  • Aktivieren Sie MediaStream
  • Aktivieren Sie PeerConnection

Anschließend können Sie die AppRTC-Demoseite besuchen, um die Demo auszuprobieren. Weitere Informationen zum Einrichten von Chrome für die Verwendung der Peer-to-Peer-Funktionalität und zum Aktivieren der Geräteerfassung finden Sie auf der Seite WebRTC - Ausführen der Demos .


UPDATE: Die Ingenieure von Ericcson Labs verfügen über einen Proof of Concept in einem WebKit-Build, der HTML5-Peer-to-Peer-Konversationsvideos erstellt .

In ihrem Blog finden Sie Demonstrationen der Technologie in Aktion sowie Diagramme und Erklärungen zur Funktionsweise der Technologie.

Sie arbeiten daran, dies zu stabilisieren und an das WebKit-Repository zu binden.

jmort253
quelle
Wie lange wird es voraussichtlich dauern, bis dies in WebKit verfügbar ist?
Alistair
Ich weiß nicht. Ich schlage vor, mit Ericcson zu sprechen. Der Link ist in meiner Antwort. Ihre Foren können Informationen darüber enthalten, wann dies sein wird.
jmort253
Das Erfordernis spezieller Konfigurations- / Flag-Einstellungen pro Browser ist nicht dasselbe wie das Teil einer funktionierenden Webstandardspezifikation. Wenn es nicht standardmäßig in HTML5, WebSockets oder WebRTC enthalten ist, können Sie Peer-to-Peer nicht ohne Hacks durchführen. Glücklicherweise scheint WebRTC in die richtige Richtung zu gehen.
Beejor
11

Ja, endlich.

Zum jetzigen Zeitpunkt (2017) ist WebRTC ein Standardbestandteil der meisten modernen Browser (etwa 70% der verwendeten Browser) und ermöglicht Multimedia-Streaming, Peer-to-Peer und Locher.

Dokumente, Beispielcode und Live-Beispiele für WebRTC finden Sie unter html5rocks.com .

Laut caniuse.com und html5rocks.com unterstützen die folgenden Browser WebRTC:

Volle Unterstützung: Edge 14, Firefox 22, Firefox Android 55
Teilweise Unterstützung: 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
Zukünftige Unterstützung ( Q3 2017): Chrome für iOS 11, Safari 11 für iOS 11 und OS X 10.11
Keine Unterstützung: IE, IE Mobile, Opera Mini

Die Sättigungsrate von WebRTC ist auf Apple-Geräten begrenzt, da Safari 11 noch nicht veröffentlicht wurde und iOS 11 oder OS X 10.11 erfordert. Obwohl WebRTC aus früheren Upgrade-Trends hervorgeht, sollte es bis 2018 auf rund 75% der iOS-Geräte und bis 2020 zu 100% verfügbar sein.

Beejor
quelle
4

Es gibt eine Reihe von Gründen, warum dies schwierig wäre:

  1. Firewalls (auch nur einfache NATs) würden diese Art der Verbindung auf einer viel niedrigeren protokalen Ebene als selbst HTTP erschweren. Mit meinem Hut für IT-Sicherheit scheint dies eine wunderbare Möglichkeit zu sein, beliebige Ports auf einem Computer zu öffnen, indem Sie einfach eine Website besuchen - und wird daher von praktisch allen IT-Systemen des Unternehmens aggressiv blockiert.
  2. HTTP ist von Natur aus ein Client-Server-Protokoll. Es ist zwar relativ einfach, Duplexkommunikation mithilfe langer Abfragen (sowie einiger anderer Techniken) zu simulieren, aber nicht besonders effizient.
  3. Dies würde ein großes Loch für XSS-Angriffe öffnen.

WebSockets wurde entwickelt, um das zweite dieser Probleme zu lösen, aber (absichtlich, wie ich erwarte) nicht die beiden anderen. Wenn sie in der HTML5-Spezifikation über Peer-to-Peer sprechen, sprechen sie über Vollduplex-Kommunikation zwischen dem Server und dem Client, nicht zwischen einem Client und einem anderen.

Es wäre jedoch einfach, einen geeigneten Netzwerkstapel über Websockets zu implementieren - mit der Maßgabe, dass die gesamte Kommunikation noch über den Server erfolgen müsste. Ich habe gesehen, dass dies mit langem Polling gemacht wurde (ein Freund von mir an der Uni hat einen vollständigen TCP / IP-Stack mit langem Polling geschrieben).

Jwoolard
quelle
P2P ist kein Client-Server. Ersteres verschiebt den Datenverkehr zwischen Peers, letzteres leitet ihn über den Server zu einem oder mehreren Clients. Der Hauptvorteil von P2P besteht darin, dass ein Server als Matchmaker fungieren kann, während zwischen den Clients viel Verkehr herrscht (was ein Segen für Datenschutz und Bandbreite ist).
Beejor
0

I second harschath.jr: Sie könnten sehr gut einen Server haben, der als Verzeichnis fungiert (wobei "Ursprünge" jedes verbundenen Agenten offengelegt werden ; Ursprung ist Schema + Host + Port wie in Draft-Abarth-Ursprung , wobei das Schema entweder "ws" ist. oder "wss"). Sie können dann Peer-to-Peer-WebSocket-Verbindungen initiieren. Die SOP wird dank CORS durchgearbeitet . Dies bedeutet natürlich, dass jeder Agent (dh ein Browser) seinen eigenen WebSocket-Server (à la Opera Unite) einbetten muss.

Machen Sie es in der Zwischenzeit auf XMPP / IRC / etc.-Weise: Keine Peer-to-Peer-Verbindung, sondern WebSocket-Verbindungen zu einem zentralen Server (oder Netzwerk!), Um Nachrichten an die verbundenen Agenten weiterzuleiten (eventuell mithilfe eines bestimmten WebSocket). Unterprotokoll ")

BEARBEITEN: Beachten Sie, dass all dies tatsächlich außerhalb des Anwendungsbereichs von HTML5 liegt (all diese Dinge waren einst Teil von HTML5, wurden jedoch in ihre eigenen Spezifikationen aufgeteilt).

Thomas Broyer
quelle