2016-11-07 8 views
0

Im eine Echtzeit-Farbauftrag schreiben NodeJS + HTML5-Canvas & WebSocketsEchtzeit Leinwand Sitzungsdaten speichern auf Knoten JS

mit

derzeit Server nur als Relais wirkt und was auch immer jeder Benutzer den Rest der Sendung wird Ziehungen Benutzer.

Das Problem hier ist, dass wenn neue Benutzer auftauchen, sie mit einer leeren Leinwand beginnen.

Ich habe zwei Ideen, wie dieses Problem zu lösen,

1) die ereignisgesteuerten Ansatz - das ist, wo ich im Speicher bestehen jede Veranstaltung ziehen. und wenn der neue Benutzer zu der Sitzung erscheint. Alle Ereignisse werden rekonstruiert und an ihn gesendet.

2) Der Server verwaltet eine Kopie der Arbeitsfläche. Anstatt also nur die Zeichenereignisse weiterzuleiten, rendert der Server auch alle Zeichenereignisse. Wenn ein neuer Benutzer erscheint, wird dieser Status an ihn weitergegeben.

Jeder hat irgendwelche Gedanken über die Vor- und Nachteile der beiden Ansatz oder noch besser, ein besserer Weg, um es zu lösen!

+0

Ran in dieser Frage selbst während meiner Diplomarbeit. Ich habe die zweite Option verwendet und redis zum Speichern von Canvas-Daten verwendet. Wenn ein Benutzer beitritt, werden die Daten über den Socket gesendet. Auf diese Weise hat jede neue Verbindung alle Daten auf dem Bildschirm –

+0

@ Dennington-Bär wow froh zu wissen, ich bin nicht allein. Vielen Dank! Hat sich dies auf die Geschwindigkeit der Zustellung an die Benutzer ausgewirkt? im Vergleich zu nur Weiterleitung? Auch daran gedacht, Redis zu verwenden! –

+0

Ich habe es nur auf meinem lokalen Netz der Hochschulen getestet. Aber ich hatte rund 100 Clients, die keine sichtbare Verzögerung vom Host hatten. Um die 120-130-Marke habe ich Lag bemerkt. Aber selbst dann ging ich aus irgendeinem Grund den Weg, den Kindprozess mit node.js zu verwenden, was nicht die beste Richtung war. Wenn ich es jetzt machen würde, würde ich mehr nach Clustern schauen. Ich denke, das würde dir viel mehr Leistung bringen, da ich wahrscheinlich überall teure Fehler zurückgelassen habe, die die Performance behindert haben. Redis war für mich die beste verfügbare Option, aber für Ihren Anwendungsfall könnte das anders sein. –

Antwort

0

Dies ist meine eigenwillige Antwort. Der beste Ansatz besteht darin, dass der Server eine Kopie der Daten über eine Datenbank verwaltet. Dies bedeutet, dass bei jedem Start des Clients immer Daten vorhanden sind, die im Fall von verlorenen Paketen beim Start eines neuen Clients verwendet werden, und dass auch ältere Daten beibehalten werden können. Als ich ein ähnliches Konzept entwickelte, benutzte ich Spielobjekte als Beispiel und bekam viele Kunden zurück. Ohne spürbare Verzögerung in einem lokalen Netz auch bei einem fehlerhaften Designkonzept. Hoffe, das hilft

Verwandte Themen