Welche schnelleren alternativen habe ich, um websockets für eine Echtzeit-web-Anwendung?
Ich bin Planung zu schreiben, ein Echtzeit-co-op-multiplayer-Spiel. Derzeit bin ich in der recherchephase. Ich habe bereits ein rundenbasiertes Spiel, das verwendet websockets und es war in Ordnung arbeiten.
Ich habe nicht versucht, das schreiben eines Echtzeit-Spiel mit dieser Technik jedoch. Meine Fragen ist über websockets. Gibt es eine alternative Methode zum behandeln der Kommunikation zwischen (browser -) Kunden? Meine Idee ist, das Spiel Stand in jedem client und senden nur die deltas, um die clients mit dem server als mediator/- Synchronisierung-tool.
Mein Hauptanliegen ist die Netzwerk Geschwindigkeit. Ich möchten, dass clients in der Lage sein zum empfangen des jeweils anderen Aktionen, so schnell wie möglich mein Spiel zu bleiben, kann Echtzeit. Ich habe über 20-30 frames pro Sekunde mit weniger als einem KByte Daten pro frame (was bedeutet, dass maximal 20-30 KByte Daten pro Sekunde pro client).
Ich weiß, dass Dinge wie "Netzwerk-Geschwindigkeit" hängt von der Verbindung, aber ich interessiere mich für die "wenn alles andere gleich" der Fall.
- wie konnte etwas schneller sein als websockets, können Sie Schiff raw-binary mit nur ein paar bytes overhead? 30kb/s ist auch zu viel für die Allgemeinheit, wenn es gebunden ist auf frames überhaupt.
- Ich weiß nicht, das ist, warum ich fragte.
- fair genug, mein Punkt ist, dass mit websockets können Sie Schiffs-Daten so schnell wie das Netzwerk geht und mit über als minimale Latenz und overhead, wie es kommt. 30FPS sollte kein problem sein, socket Reisen sind in der Regel unter 10ms (nicht mitgerechnet TTFB), es sei denn, dein server ist weit Weg, in welchem Fall es kann bis zu 15ms zu gehen, vor allem rund um die Welt. 15ms*2=30ms hin-und Rückfahrt, 1000ms/30ms=33.3 FPS. Versand Reine deltas, wahrscheinlich bedeutet, dass die Schifffahrt ein Schlüssel / Wert-paar, sondern eine geordnete Reihe von Werten-nur wäre wahrscheinlich "billiger", auch mit den zusätzlichen Kommas erstellen einer sparse-array, während das weglassen redundanter Elemente.
- Hört sich gut an. Sie möchten, dass eine Antwort so kann ich upvote es.
- Latenz-Zeiten sind viel größer als Sie denken. transatlantic (z.B.: New York-London) ist in der Regel > 100ms. wenn Sie sind unglücklich genug, (von einer Netzwerk-engineering-Perspektive), in Neuseeland zu Leben, können Sie erwarten, dass mindestens 150 MS an /alle/ kostengünstige Datacenter-basierten hosting. viele der großen telcos veröffentlichen historische round-trip-Zeiten. zB: verizonenterprise.com/about/network/latency
- ich war nicht darüber reden-trip-Zeiten, war ich Rede, wie lange dauert es, wenn der server schließt die Verbindung, wenn der client parst die Antwort, das dauert bei weitem nicht so lange wie eine halbe round-trip - ... ex: CHI-SF dauert etwa 70ms ping, aber die Antwort kommt in der Regel innerhalb von 10-20ms, nachdem es versendet, sobald die Verbindung aufgebaut ist und läuft... es ist eine Frage, wie stale die Daten auf dem server, wenn es trifft die Kunden, und die Antwort ist "nicht sehr" (bezogen auf die ping-Zeiten)
- fairer Punkt, dass die Zeit der Flug wird besser sein, dass die Hälfte der RTT. ich war meist uneins mit Ihrem "es kann bis zu 15ms zu gehen, vor allem rund um die Welt" - Kommentar. wie du selbst sagst, CHI-SF wird so lange dauern. wenn Sie planen, für eine /global/ service, den Sie benötigen, um den Faktor auf längere Zeiten.
- dies veranlasste mich zu suchen der /theoretische/ Geschwindigkeit der übertragung; en.wikipedia.org/wiki/Optical_fiber besagt, dass die Geschwindigkeit von Licht durch die Faser ~200,000,000 ms. so CHI-SF dauern würde, 2,981,000 m / 200,000,000 ms = 0.014905 Sekunden = ~15ms. ich würde bezüglich "um die halbe Welt" als so etwas wie New York, Sydney: 15,979,000 m / 200,000,000 ms = 0.079895 Sekunden = ~80ms. dies sind die besten /theoretische/ Fällen. die Reale Welt umfasst in-direkte Faser-Pfade, überlastete Router und gremlins.
- der Kommentar könnte besser gewesen, kein Zweifel... deine Mathe ist gut, aber, der server sollte idealerweise auf halbem Weg zwischen sydney und New York in diesem Fall und auch im Hinterkopf behalten-Pakete kann die Reise in beide Richtungen auf einmal, so mit allen, die, ich denke 20FPS ist machbar. wenn OP nur noch einen server für die Welt und die Benutzer von überall, es wird hart werden w/o Schätzung/Pufferung/Bearbeitung der Vergangenheit...
Du musst angemeldet sein, um einen Kommentar abzugeben.
Vom standard-browser eine webSocket wird Ihre beste Wette. Die einzigen beiden alternativen sind, webSocket und Ajax. Beide sind TCP unter der Decke, so dass, sobald die Verbindung hergestellt ist Sie so ziemlich das gleiche Angebot-transport. Aber, ein webSocket ist eine permanente Verbindung, so dass Sie sparen Verbindung overhead jedes mal, wenn Sie etwas senden möchten. Plus die dauerhafte Verbindung der webSocket ermöglicht Ihnen das senden direkt vom server an die Clients, die Sie möchten.
In ein typisches gaming-design, die zugrunde liegende Spiele-engine anpassen muss, um die Geschwindigkeit des Verkehrs zwischen server und client. Wenn der client über eine langsamere Verbindung haben, dann müssen Sie drop die Anzahl der Pakete, die Sie an etwas halten kann (vielleicht weniger frame-updates in Ihrem Fall). Die Geschwindigkeit der Verbindung ist, was es ist, so dass Sie haben, um Ihre app bieten die beste Erfahrung, die Sie können mit der Geschwindigkeit, die es gibt.
Einige andere Dinge, die Sie tun können, um die Optimierung der Nutzung der Verkehrsmittel:
Sammeln Sie alle Daten, die Sie brauchen, um zu senden zu einer Zeit und senden Sie es in einem größeren Vorgang senden, anstatt viele kleine sendet. In einer webSocket, nicht senden drei separaten Nachrichten, jede mit Ihren eigenen Daten. Erstellen Sie stattdessen eine Nachricht mit der info von allen drei Botschaften.
Wann immer möglich, verlassen Sie sich nicht auf die Latenz der Verbindung durch das senden, warten auf eine Antwort, die Sie erneut senden, warte auf Antwort, etc... versuchen Sie Stattdessen, zu parallelisieren von Vorgängen, so dass Sie senden, senden, senden und verarbeiten dann Antworten, wie Sie kommen in.
Tweak-Einstellungen für ausgehende Pakete vom server, so dass Ihre keine Nagle Verzögerung warten, um zu sehen, wenn es andere Daten gehen in die gleiche Paket. Sehen Nagle-Algorithmus. Ich glaube nicht, dass Sie die Fähigkeit haben, in einem browser, um das zwicken vom client.
Stellen Sie sicher, dass Ihre Daten verschlüsselt werden, so effizient wie möglich für die kleinste Paketgröße.