Ermöglichen Websockets die Kommunikation mit P2P (Browser zu Browser)?

74

Um zu verdeutlichen, wenn ich nach der Kommunikation von Browser zu Browser frage, meine ich, dass zwischen den Weiterleitungsnachrichten kein Server vorhanden ist. Ich möchte so etwas für ein Spiel implementieren. Wenn p2p in Websockets nicht möglich ist, gibt es ähnliche Alternativen? Jede Hilfe wird geschätzt.

Xavier
quelle
Ja, aber kein Browser hat eine funktionierende Implementierung, und ich glaube, er ist jetzt Teil der Stream-API.
Antimaterie15
5
Das W3C entwirft nun die WebRTC- Spezifikation, in der unter anderem über Peer-to-Peer-Verbindungen gesprochen wird.
Pierre de LESPINAY

Antworten:

51

Nein. Browser können nur WebSockets-Verbindungen initiieren, nicht empfangen. Die W3C-Browser-API-Spezifikation definiert nur, wie eine ausgehende Verbindung gestartet wird.

Sie können eine Anwendung erstellen, die WebSockets-Verbindungen sowohl initiiert als auch akzeptiert, Browser dies jedoch nicht.

Möglicherweise sehen Sie sich die Pusher-App an, mit der Sie eine WebSockets-Anwendung mit mehreren Clients erstellen können. Der Dienst bietet bis zu 20 gleichzeitige WebSockets-Clients kostenlos an (Sie können für eine höhere Skalierung bezahlen).

Update :

Das WebRTC- Protokoll und die API machen schnelle Fortschritte und ermöglichen die Einrichtung eines Datenkanals zwischen zwei Peers (möglicherweise benötigen Sie noch einen STUN / TURN-Server für die anfängliche NAT-Durchquerung und Einrichtung).

Kanaka
quelle
5
+1. Ich würde jedoch keine Apps von Drittanbietern empfehlen. Viel einfacher, eigene zu bauen.
Josh K
Pusher bietet jetzt 20 gleichzeitige Verbindungen und 100.000 Nachrichten pro Tag kostenlos :)
Tieme
Ich denke, Sie sollten Ihre Antwort aktualisieren: labs.ericsson.com/developer-community/blog/…
Mehdi Karamosly
1
@kanaka bedeutet das, dass Sie das erste Mal noch den Server durchlaufen müssen, um eine Peer-2-Peer-Verbindung herzustellen?
Mehdi Karamosly
1
@MehdiKaramosly, es ist theoretisch möglich ( blog.printf.net/articles/2013/05/17/… ), aber es ist ein sehr ungewöhnlicher Anwendungsfall, da sich fast jeder hinter einer NAT-Firewall befindet und Sie noch eine Möglichkeit benötigen, die Signalisierung einzurichten (Teilen Sie die Verbindungsdetails mit).
Kanaka
36

Theoretisch ist es mit WebRTC DataChannel möglich :

RTCDataChannel ist eine WebRTC-API für die Peer-to-Peer-Kommunikation von britischen Daten mit hoher Leistung und geringer Latenz. Die API ist einfach - ähnlich wie WebSocket -, aber die Kommunikation erfolgt direkt zwischen Browsern, sodass RTCDataChannel viel schneller als WebSocket sein kann, selbst wenn ein Relay-Server (TURN) erforderlich ist (wenn das "Lochloch" zur Bewältigung von Firewalls und NATs fehlschlägt).

"Theoretisch", da es noch nicht von einem stabilen Browser unterstützt wird und Sie weiterhin einen Relay-Server (TURN) benötigen, wenn sich einer der Browser hinter einem symmetrischen NAT befindet . Trotzdem ist es ein wirklich vielversprechendes Feature.

Update: Chrome 26 und Firefox 22 unterstützen standardmäßig RTCDataChannel und Firefox 19-21, wenn Sie WebRTC aktivieren, indem Sie media.peerconnection.enabledtrue festlegen (about: config).

Joel Richard
quelle
8

Ich habe über Websocket und Peer 2 Peer gelesen und PeerJS gefunden .

Ich habe zwar noch nichts gemacht, aber anhand der Beispiele sieht es vielversprechend aus.

Shadownrun
quelle
5
PeerJS ist ein Wrapper über WebRTC.
Gábor Imre
3

Heutzutage ist es möglich, derzeit unterstützen es nur Chrome, FF und Opera (Desktop).

Momentan tauchen im Internet einige Bibliotheken auf, wie PeerJS und js-platform-p2p, was die Dinge ziemlich vereinfacht.

eric.itzhak
quelle
0

Eine einfache und zuverlässige browserübergreifende Methode ist die Verwendung von http://httprelay.io mit AJAX-Aufrufen. Es implementiert auch eine bis viele Kommunikation, was für die Spieleentwicklung nützlich sein könnte.

Jonas
quelle