发送从服务器到客户端的自定义对象列表

我在同一个js文件中创build了一个由客户端和服务器共享的Character类。

服务器实例化这些字符并将它们存储在一个characterList对象中。 我用socket.emit( 'updated_characters', characterList )发送给客户端,但是客户端取回了Object的一个对象,而不是Character的对象,所以我不能使用我的Character的方法。

我怎样才能解决这个问题?

您不能直接使用socket.io发送自定义对象types。 socket.io使用JSON作为对象的传输格式,JSON不具有logging或重build自定义对象types的能力。

所以,你需要做的是为你的对象(也可能是JSON)创build一个序列化的格式,然后当你读取另一端的数据时,你将在你自己的代码中构造一个自定义的对象,然后通过它这个数据在它将从中初始化自己的构造函数。

执行此操作的规范方法是为您的自定义对象创build一个序列化方法,以创build一个新的纯对象,该对象包含需要通过线路发送的所有相关信息,并且不包含对其他对象的引用(因为不能被序列化)。 请记住,对象通常有家务信息,不一定需要发送到另一端。 然后,为您的自定义对象创build一个初始化方法,该方法可以获取此序列化的数据,并正确初始化您可以在另一端使用的对象。

这是一个简单的例子:

 function MyObject(data) { if (data) { this.init(data); } else { this.count = 0; this.greeting = "hello" } } MyObject.prototype = { init: function(data) { this.greeting = data.greeting; this.count = data.count; }, getData: function() { return {greeting: this.greeting, count: this.count}; }, talk: function() { say(this.greeting); } }; 

然后,在事情的发送端,如果您的项目中有一个对象的实例,则可以使用以下内容发送数据:

 socket.emit('updated_characters', item.getData()); 

而且,在接收方面,你会有这样的:

 socket.on('updated_characters', function(data) { var item = new MyObject(data); // do something with the item here }); 
 socket.emit( 'updated_characters', JSON.stringify(characterList) ); 

我们必须执行JSON.stringify ,以使套接字标识为JSON并将其显示在前端