在MongoDB中存储循环对象

时间:2017-08-26 15:41:49

标签: node.js mongodb sockets mongoose socket.io

我正在使用socket.io模块为Node.js进行用户之间的通信。我想要的是:一旦特定用户建立连接,我需要将他/她的套接字存储在数据库中,以便万一我需要它,我可以在任意时刻向他/她发送消息。因此,由于我可以拥有数百个用户,因此我想将他们的套接字对象存储在数据库中。 为此,我使用了Schema类型Mixed,因为套接字是Objects。但是,套接字是循环对象,因此当尝试在数据库中存储套接字时,我的堆栈会溢出。我对此感兴趣:是否可以在MongoDB中存储这样的循环对象?我设法将套接字存储在变量中,并在以后重用它们以使用它们发送消息,所以如果我将这些套接字存储在某些数据结构中,这是可能的,但我感兴趣的是它们是否可以存储在数据库中?感谢

1 个答案:

答案 0 :(得分:0)

可能无法存储循环对象,在数据库中存储套接字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' });