2012-10-12 6 views
7

Stellen Sie sich vor Ich möchte ein Echtzeit-Multiplayer-Spiel mit HTML5 (Client) und node.js (Server) erstellen.WebRTC der richtige? (Echtzeit-Multiplayer-Spiel)

Ich muss die Daten transportieren, sehr schnell von dem Server an die Clients und umgekehrt.

In einer nativen Anwendung würde ich UDP für die meisten Daten verwenden (Spielerposition, ...), weil es viel schneller ist als TCP und es ist unkritisch, wenn es verloren geht.

In HTML5 kann ich (nur) WebSockets verwenden. WebSockets ist auf TCP und somit nicht schnell genug für eine gute Leistung.

Ich hörte von WebRTC, aber ich weiß nicht, ob dies die Lösung für dieses Problem sein könnte.

Hat jemand Erfahrung damit?

(ich weiß, dass WebRTC für die meisten Browser noch nicht unterstützt wird, aber das ist für mich keine Rolle.)

+0

Sind Sie sicher, dass die Websockets für Ihren Anwendungsfall zu langsam sind? Ein TCP-Socket wird für die Dauer Ihrer Websocket-Sitzung offen gehalten, so dass Sie sich nicht um den Overhead der Verbindung für jede Nachricht kümmern müssen. – simonc

+0

TCP: Zuverlässige Zustellung von Nachrichten; Alle Daten werden bestätigt Lieferung aller Daten wird verwaltet, und verlorene Daten werden automatisch erneut übertragen. UDP: Unzuverlässige, bestmögliche Lieferung ohne Bestätigungen Also TCP ist einfach die falsche Technik für diesen Anwendungsfall. – appsthatmatter

+1

Versuchen Sie, es mit WebSockets zu implementieren und zu messen, ob es wirklich zu langsam ist (überflüssig zu sagen, abstrahieren Sie Ihre Transport-Implementierung, so dass, wenn WebSockets sich als unbefriedigend erweisen, Sie etwas anderes verwenden können, ohne viel Code zu verwerfen). Im Moment optimieren Sie vorzeitig. – ebohlman

Antwort

2

In Bezug auf die WebRTC, klingt wie das, was Sie brauchen, ist Datachannel: siehe draft protocol und HTML5 Rocks article (Haftungsausschluss: ich habe es geschrieben)

Datachannel ist ein work in progress, die noch nicht von jedem Browser implementiert.

Wie bei anderen Komponenten WebRTC, Mediastream (getUserMedia) von Chrom, Firefox Night und Opera unterstützt; RTCPeerConnection ist in Chrome stabil, hinter einer Flagge (flagless in den kommenden Versionen), und versprochen für Firefox 18 in Q1 2013.

EDIT: RTCDataChannel wurde jetzt in Firefox und Chrome implementiert.

Chrome "einzelne Seite" Demo: simpl.info/dc, Firefox demo.

+0

In Bezug auf die neuesten Ankündigungen sehe ich MediaStream und PeerConnection sind schnell voran. Wie läuft DataChannel? Auch Ihr aticle erwähnt DataChannel für Browser-zu-Browser-Kommunikation. Es funktioniert auch mit Browser-zu-Server, oder? – Cystack

+1

Vielen Dank, dass Sie darauf hingewiesen haben - haben Sie das eine Weile nicht angeschaut: EDIT. Auf einem Server können Sie die WebRTC C++ APIs verwenden. –

1

RTCDataChannel bietet sitzungsbasierte/zuverlässige sowie verbindungs ​​/ unzuverlässiger Transport, analog zu TCP und UDP in einem nativen Client, respectively. Weitere Informationen here. Ab 2013 ist dies eine brauchbare Technologie, allerdings nur in späteren Chrome- und Firefox-Builds.

According to html5rocks.com ist es auch möglich Binärtypen für die Übertragung zu verwenden. Sie sollten also über alle Möglichkeiten verfügen, die Sie mit einem effizienten nativen UDP-Client haben. Wie auch immer,, bin ich noch unsicher, ob der Binärtransfer vom webrc-Repository, where it has been fixed, den ganzen Weg nach Chrome geschafft hat, oder ob es zu diesem Zeitpunkt noch in Chrome Canary verfügbar ist.