Frage

Ich versuche, Objekte von einem Kunden an einen anderen Kunden zu übergeben, z. B. Stücke in einem Multiplayer -Brettspiel. Ich habe eine funktionierende Lösung mit Verwendung JSON.parser und __proto__, aber ich bin gespannt, ob es einen besseren Weg gibt.

Client sendet:

var my_piece = new BoardPiece();
// ... my_piece is assigned data, like x-y coordinates
socket.send(JSON.stringify(my_piece));

Server leitet das Stück an andere weiter:

client.broadcast(piece);

Ein anderer Client erhält:

var your_piece = JSON.parse(json);
your_piece.__proto__ = BoardPiece.prototype; // provide access to BoardPiece's functions

Es ist der letzte Schritt, in dem ich benutze __proto__ Ich mache mir Sorgen, dass ich mich in den Fuß schieße. Gibt es einen besseren Vorschlag?

War es hilfreich?

Lösung

// clientone.js

var piece = new BoardPiece();
// ...
socket.send(JSON.stringify(piece));

// clienttwo.js
var piece = BoardPiece.Create(JSON.parse(json));
...

// BoardPiece.js
function BoardPiece() {

}

BoardPiece.prototype.toJSON = function() {
    var data = {};
    data.foo = this.foo;
    ...
    return data;
};

BoardPiece.Create = function(data) {
    var piece = new BoardPiece();
    piece.foo = data.foo;
    ...
    return piece;
}

Erstens mit dem toJSON Methode auf Ihren Objekten erlaubt es JSON.stringify Um Ihr Objekt sofort in JSON zu konvertieren. Dies ist Teil der JSON -API. Die JSON -API wird das anrufen toJSON Methode, wenn es existiert und diese Objekte in JSON konvertiert.

Dies ermöglicht es Ihnen im Grunde, Ihr Objekt nach und wie Sie möchten.

Der zweite Teil besteht darin, eine Fabrikmethode als Eigenschaft Ihres Konstruktors hinzuzufügen, die Ihre serialisierten JSON -Daten nimmt und ein neues Boardpiece erstellt. Anschließend wird Ihre serialisierten Daten in dieses Boardpiece -Objekt eingerichtet.

Ihre Serialisierung nur die Daten, die Ihnen wichtig sind, und diese Daten dann über eine Fabrikmethode übertragen. Dies ist der beste Weg, um benutzerdefinierte Objekte von einem Client an einen anderen zu senden.

Andere Tipps

Es gibt eine Reihe von Objektsynchronisierungsprojekten für Knoten, die das Leben erleichtern könnten. Für den Anfang schauen Sie sich an:

Hat Tou JQuery's $ .EXTEND () -Methode ausprobiert? http://api.jquery.com/jquery.extend/

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top