如何在Socket.IO中传递JavaScript中的“新”对象

时间:2011-05-03 05:09:33

标签: javascript json node.js socket.io

我正在尝试将对象从一个客户端传递到另一个客户端,例如多人棋盘游戏中的棋子。我有一个使用JSON.parser__proto__的工作解决方案,但我很想知道是否有更好的方法。

客户发送:

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

服务器将该片段转发给其他人:

client.broadcast(piece);

另一位客户收到:

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

这是我使用__proto__的最后一步,我担心我可能会在脚下拍摄自己。有更好的建议吗?

3 个答案:

答案 0 :(得分:8)

// 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;
}

首先在对象上使用toJSON方法,{}允许JSON.stringify立即将您的对象转换为JSON。这是JSON API的一部分。 JSON API将调用toJSON方法(如果存在)并将该对象转换为JSON。

这基本上允许您根据需要序列化对象。

第二部分是添加一个工厂方法作为构造函数的属性,它接受序列化的JSON数据并创建一个新的元件。然后它会将您的序列化数据注入该板块对象。

因此,您只序列化您关心的数据,然后通过工厂方法传递该数据。这是将自定义对象从一个客户端发送到另一个客户端的最佳方式。

答案 1 :(得分:3)

节点有很多对象同步项目可能会让生活更轻松。首先,请查看:

答案 2 :(得分:0)

您是否尝试过jQuery $ .extend()方法? http://api.jquery.com/jQuery.extend/