gpt4 book ai didi

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

转载 作者:搜寻专家 更新时间:2023-10-31 23:29:48 25 4
gpt4 key购买 nike

我正在尝试将对象从一个客户端传递到另一个客户端,例如多人棋盘游戏中的棋子。我有一个使用 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com