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.
Antworten:
Hier auf Stackoverflow finden Sie verschiedene Themen zu P2P-Verbindungen in Browsern:
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 wird
chrome://flags
. Es unterstützt nurMediaStream
Video und Audio und kann mit mehreren Demos getestet werden . Das Übertragen von Anwendungsdaten wieString
/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
,ArrayBuffer
undBlob
). 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:
quelle
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.
quelle
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.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.
quelle