如何通过“新”考试? Socket.IO 中的 JavaScript 对象
我正在尝试将对象从一个客户端传递到另一个客户端,例如多人棋盘游戏中的棋子。我有一个使用 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__ 的最后一步,我担心我可能会搬起石头砸自己的脚。有更好的建议吗?
I'm trying to pass objects from one client to another client, e.g. pieces in a multiplayer board game. I have a working solution using JSON.parser
and __proto__
, but I'm curious to know if there is a better way.
Client sends:
var my_piece = new BoardPiece();
// ... my_piece is assigned data, like x-y coordinates
socket.send(JSON.stringify(my_piece));
Server forwards the piece to others:
client.broadcast(piece);
Another client receives:
var your_piece = JSON.parse(json);
your_piece.__proto__ = BoardPiece.prototype; // provide access to BoardPiece's functions
It's the last step where I use __proto__
that I'm concerned I may be shooting myself in the foot. Is there a better suggestion?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
首先,在对象上使用
toJSON
方法可以让JSON.stringify
立即将对象转换为 JSON。这是 JSON API 的一部分。 JSON API 将调用toJSON
方法(如果存在)并将该对象转换为 JSON。这基本上允许您按照您想要的方式序列化您的对象。
第二部分是添加一个工厂方法作为构造函数的属性,该构造函数获取序列化的 JSON 数据并创建一个新的 boardpiece。然后它会将序列化的数据注入到该 boardpiece 对象中。
因此,您只序列化您关心的数据,然后通过工厂方法传递该数据。这是将自定义对象从一个客户端发送到另一个客户端的最佳方式。
Firstly using the
toJSON
method on your objects allowsJSON.stringify
to immediatly convert your object to JSON. This is part of the JSON API. The JSON API will call thetoJSON
method if it exists and converts that object to JSON.This basically allows you to serialize your object as and how you want.
The second part is adding a factory method as a property of your constructor which takes your serialized JSON data and creates a new boardpiece. It will then inject your serialized data into that boardpiece object.
So your serializing only the data you care about and then passing that data through a factory method. This is the best way to send custom objects from one client to another.
有很多用于节点的对象同步项目可能会让生活变得更轻松。对于初学者,请查看:
There are a bunch of object syncing projects for node that might make life easier. For starters, check out:
你尝试过 jQuery 的 $.extend() 方法吗? http://api.jquery.com/jQuery.extend/
Have tou tried jQuery's $.extend() method? http://api.jquery.com/jQuery.extend/