node.js - 向客户端发送数据(数据是具有大原型(prototype)的对象)

标签 node.js sockets socket.io

(想要更新一个新客户端,该客户端使用迄今为止创建的所有聊天室的列表进行登录)

假设我做了这样的事情:(每次有人加入应用程序时)

socket.emit('updateClient', rooms);

rooms 是一个对象,由 Room 对象的许多 room 实例组成,该对象本身很小,但代码却很大作为 room

prototype

房间示例:

var rooms = {};  // contain all "Room" instances
..
..
// 'room' will create new instance for every "room" created
var room= new Room();
// save reference in `rooms`
rooms[room.id] = room;
..
var Room = function(){
    this.id = RANDOM NUMBER
    this.people = []; // an array of people in the room
}

Room.prototype = {
    ...
    A LOT OF INNER FUNCTIONS
    THAT ARE IRRELEVANT TO THE CLIENT
    ...
}

我的问题是:

原型(prototype)会被发送给客户吗? (不想那样) 并且它会以我这样做的方式使套接字请求“繁重”吗?

最佳答案

socket.io 可能会使用 JSON.stringify 来发送任何对象,而 JSON.stringify 只会序列化一个对象的“自己的”属性(并且会遗漏任何函数最重要的是)。所以不,发送的序列化对象不会很重。同样,它可能不包含您期望的所有属性。它将仅包含您在特定 room 对象上明确设置的那些。

参见 How to stringify inherited objects to JSON? , Why is JSON.stringify not serializing prototype values? .

关于node.js - 向客户端发送数据(数据是具有大原型(prototype)的对象),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16438147/

相关文章:

javascript - 从第三个函数的异步第一个函数获取结果的更好方法是什么?

node.js - 在 hasMany 关联上包含仅返回 sequelize nodeJs 中的许多结果之一

node.js - 如何模拟 moment.utc() 进行单元测试?

java - 如何使用JAVA线程从套接字读取输入

php - 触发nodeJS socket.io服务器通过端口80进行广播

node.js - Socket.io 错误传递约定

javascript - Koa-mount/路由器+socket.io集成

Javascript 也会改变 const 变量

c# - 线程和 socket

python - 使用 Python 从 Unix 套接字连接读取和写入