1 回答

TA贡献1809条经验 获得超8个赞
在v3.0.0的变更日志中,他们提到以下
Socket#rooms 现在是一个 Set 而不是一个对象
这意味着它现在是一个Map 对象而不是普通的 js 对象
因此,在 v3.0.3 中,您在记录房间时会得到以下输出,您无法像普通 js 对象一样通过键访问房间,而必须使用 .set() 来代替。
Map(2) {
'II-OqYrpZYtv2bKrAAAD' => Set(1) { 'II-OqYrpZYtv2bKrAAAD' },
'room1' => Set(1) { 'II-OqYrpZYtv2bKrAAAD' }
}
虽然我不知道如何向房间添加额外的变量。因为如果您运行以下代码:
io.sockets.adapter.rooms.set(room, {
variable: "Test variable"
})
它用新变量替换套接字 ID。我找不到任何关于他们希望我们如何使用这种新结构存储变量的信息。
Map(2) {
'Xv6vbxuOgDuqp6dmAAAB' => Set(1) { 'Xv6vbxuOgDuqp6dmAAAB' },
'room1' => { variable: 'Test variable' }
}
当使用 v2.0.3 记录房间时,您会得到一个正常的对象输出,您可以使用 [key] 访问该输出。
{
'tVnQpZyKDglSf4J-AAAA': Room { sockets: { 'tVnQpZyKDglSf4J-AAAA': true }, length: 1 },
room1: Room { sockets: { 'tVnQpZyKDglSf4J-AAAA': true }, length: 1 }
}
因此,如果您将 socket.io 恢复到 v2.0.3(最新的 2.xx 版本),您的代码可以正常工作。
您可以通过运行以下命令来恢复 socket.io
npm i socket.io@2.0.3
或者通过更改package.json中的版本号然后运行
npm install
添加回答
举报