gpt4 book ai didi

node.js - socket.io 房间授权

转载 作者:搜寻专家 更新时间:2023-10-31 23:48:05 26 4
gpt4 key购买 nike

我有一个 socket.io 的用例,其中在一个单独的命名空间内,一个客户端可以连接到多个房间。用户需要在每个房间的基础上进行身份验证(因为可能不允许他们访问这些数据流)。

显然,我可以使用中间件函数和一些身份验证数据来检查连接到命名空间的授权,但除非这些房间在连接启动时已经在 socket.rooms 中,否则我不知道如何检查,当 socket 加入房间时,它是否被授权,如果没有授权,随后强制它离开房间。

是否有 join 事件或等效的方法?类似于 namespace 的 connection 事件,但房间。

编辑

通读了 socket.io 的源代码,当套接字加入房间时似乎没有触发任何事件,但我可能误解了一些东西:在阅读 socket 的源代码时.io-client,加入房间不是系统固有的,这表明这只能在服务器端触发。在那种情况下,我假设我必须自己管理客户加入房间?如果这是真的,那么我就可以拥有类似的东西:

socket.on('join', function(data) { ... });

这样当一个套接字想要监听一个特定的数据流时,它只是发出一个“加入”事件,带有一些关于它想加入哪个房间的数据,我来处理整个事情在服务器上?

最佳答案

只能在服务器上加入房间。客户端通常会向服务器发送特定于应用程序的消息,向您的应用程序指示他们想要加入特定房间,然后如果请求有效,服务器会代表用户执行该操作。

因此,您所要做的就是将所有代码路由到服务器上,这些代码可以通过一个特定的功能加入房间,该功能可以执行您想要执行的任何身份验证。例如,您可以简单地创建一个函数,这是您的服务器代码将 socket 放入房间的唯一方式:

function joinAuth(socket, room) {
// can do anything you want here before actually joining the room
}

关于node.js - socket.io 房间授权,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28990666/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com