【问题标题】:Storing circular objects in MongoDB在 MongoDB 中存储圆形对象
【发布时间】:2017-08-26 15:41:49
【问题描述】:
我正在使用用于 Node.js 的 socket.io 模块进行用户之间的通信。我想要的是:一旦特定用户建立连接,我需要将他/她的套接字存储在数据库中,以便在需要时可以在任意时间向他/她发送消息。因此,由于我可以拥有数百个用户,我想将他们的套接字对象存储在数据库中。
为此,我使用了混合模式类型,因为套接字是对象。但是,套接字是 循环 对象,因此在尝试将套接字存储在数据库中时,我的堆栈会溢出。我对此感兴趣:是否可以在 MongoDB 中存储此类循环对象?我设法将套接字存储在变量中并稍后重用它们以使用它们发送消息,所以如果我将这些套接字存储在某些数据结构中,这是可能的,但我对它们是否可以存储在数据库中感兴趣?谢谢
【问题讨论】:
标签:
node.js
mongodb
sockets
mongoose
socket.io
【解决方案1】:
可能无法存储循环对象,将socket id存储在数据库中也是完全错误的,因为它会随着时间的推移而变化并且没有用。
你能做和(你应该做的)是为用户创造空间:
io.on('connection', function(socket){
// you are emitting this event from client with your choose of identifier
socket.on('auth', function(userId) {
socket.join('room:' + userId)
})
})
然后您可以向特定用户发出事件,因为您正在为该用户创建私人房间,userId 等:
var userId = 1234
io.in('room:' + userId).emit('hello', { 'asd': 'xxx' });