Comment passer un objet « nouveau » en JavaScript Socket.IO
-
28-10-2019 - |
Question
Je suis en train de passer des objets d'un client à un autre client, par exemple pièces dans un jeu de plateau multi-joueurs. J'ai une solution de travail en utilisant JSON.parser
et __proto__
, mais je suis curieux de savoir s'il y a une meilleure façon.
Le client envoie:
var my_piece = new BoardPiece();
// ... my_piece is assigned data, like x-y coordinates
socket.send(JSON.stringify(my_piece));
Serveur avant la pièce à d'autres:
client.broadcast(piece);
Un autre client reçoit:
var your_piece = JSON.parse(json);
your_piece.__proto__ = BoardPiece.prototype; // provide access to BoardPiece's functions
Il est la dernière étape où j'utilise __proto__
que je suis concerné, je peux être moi-même tirer dans le pied. Y at-il une suggestion mieux?
La solution
// 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;
}
Tout d'abord en utilisant la méthode de toJSON
sur vos objets permet JSON.stringify
de convertir votre objet à immediat JSON. Cela fait partie de l'API JSON. L'API JSON appellera la méthode toJSON
si elle existe et convertit cet objet à JSON.
Cela vous permet essentiellement de sérialiser votre objet au fur et à la façon dont vous voulez.
La deuxième partie est l'ajout d'une méthode de fabrication en tant que propriété de votre constructeur qui prend vos données JSON sérialisé et crée une nouvelle boardpiece. Il vous injectera ensuite vos données sérialisé dans cet objet boardpiece.
Ainsi, votre sérialisation que les données que vous aimez et passer ensuite ces données par une méthode de fabrication. Ceci est la meilleure façon d'envoyer des objets personnalisés d'un client à l'autre.
Autres conseils
Il y a un tas de projets de synchronisation d'objet pour le noeud qui pourrait rendre la vie plus facile. Pour commencer, consultez:
Vous TOU essayé la méthode de jQuery $ .extend ()? http://api.jquery.com/jQuery.extend/