请原谅我的无知,node.js/socket.io 的第二天
我正在寻找一种方法来唯一标识在数据库排队系统中使用的用户。我读了很多关于使用 Express session cookie 的内容,但是我注意到 socket.id 似乎是 socket.io 已经在使用的 UID。
因此,我一直在数据库中使用 socket.id 来识别我的用户,并创建私有(private)“房间”来与他们进行通信。
这是一个糟糕的主意吗?
最佳答案
套接字 ID 就是这样 - 它唯一地标识一个套接字。它不能唯一地标识用户,并且绝对不打算用于此目的。单个用户(在许多应用程序中)可能有多个连接(因此有多个具有不同 ID 的套接字)。此外,每次连接时,他们都会被分配一个新的 ID。
因此,您显然不应该使用 socket.id
作为用户 ID。 Mustafa 指出您可以将 socket.id
重新分配给用户 ID,但我倾向于认为这是一个非常糟糕的主意,原因有两个:
socket.id
应该唯一标识一个套接字,因此当单个用户打开多个套接字时,您会遇到问题。- Socket.IO 在内部大量使用该 ID 将内容存储在哈希表中,如果更改 ID,可能会得到意外的结果并且很难追踪错误。我还没有测试过它,但是查看 Socket.IO 源代码,这就是我所期望的。
最好使用其他方法生成 ID,然后将用户与套接字关联(例如,在握手期间使用 cookie 中的数据)。
socket.set(key, value,callback)
是明确用于将您自己的数据(如用户 ID)与套接字连接相关联的方法,并且是唯一有保证的方法为了安全起见。
关于node.js - 你可以依赖socket.id作为UID吗,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15989514/