每个客户端保存socket.io数据

Saving socket.io data per client

本文关键字:io 数据 socket 保存 客户端      更新时间:2024-06-30

如何在Socket.io上为每个客户端保存数据?我已经想到了这个,然而当我读到它可能是无效的:

io.on('connection', function(socket) {
    console.log('socket connected');
    var user = {};
    //do stuff with user.
});

这正常工作吗?或者如果有其他人加入,它会混合吗?如果它不能正常工作,那该怎么办?

您所拥有的为每个单独的连接创建一个闭包,这样它就可以很好地处理您想要保存在内存中的每个套接字数据。然后,您需要将所有其他套接字通信都放在同一个闭包中,这样它也可以访问数据。这样做的缺点是很难从外部获取数据(这有时是必需的,但有时不是)。

这样做的一个缺点是数据是暂时的,不会持续到当前连接之后。如果存在任何类型的连接或客户端问题,并且连接的socket.io被丢弃并重新连接,那么将创建代表新连接的新闭包,并且在套接字关闭时将垃圾收集原始闭包。

有时这样做的另一种方法是使用socket.id作为共享数据结构的索引,或者如果您使用任何类型的身份验证和userID来将该id用作共享数据结构中的索引。