javascript - 如何在 Socket.IO 的 JavaScript 中传递一个 "new"对象

标签 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__ 的最后一步,我担心我可能搬起石头砸自己的脚。有更好的建议吗?

最佳答案

// 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 数据并创建一个新的棋盘。然后它将您的序列化数据注入(inject)到该 boardpiece 对象中。

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

关于javascript - 如何在 Socket.IO 的 JavaScript 中传递一个 "new"对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5865280/

相关文章:

javascript - 使用 jQuery 自动刷新 div - setTimeout 或其他方法?

javascript - jQuery 插件创作和命名空间

用于管理占位符的 Javascript 插件

javascript - 如何分离Json字段并将它们放入变量中

unit-testing - Mocha 测试输出字体丢失?

javascript - 使用 Ember.js 临时将 CSS 类添加到 DOM 元素

javascript - JS 中 return 后方括号的含义 - fn(){return{}[]}

java - Json格式错误,已经获取数组时再请求数组

node.js - 引发 ValueError ("Unsupported Lambda runtime {}".format(运行时))

javascript - 将数据传回 Controller 时出现问题