【发布时间】:2020-12-11 08:18:36
【问题描述】:
在我的项目中,我有一些需要验证的套接字和一些不包含 auth-token 的套接字。
const socket = require('socket.io');
let server = require('http').createServer(app);
require('./config/authSockets')(socket(server));
require('./config/sockets')(socket(server));
我已经为这个场景创建了单独的文件,在 authSockets 中,首先它应该检查套接字是否有令牌,然后它将只打开连接并发出这些套接字。下一个文件是 ./config/sockets 这个文件应该每次都运行,它不需要套接字。但我的代码不起作用,它总是只接受第二个文件。
【问题讨论】:
-
请向我们展示代码,以便我们在最后两行代码中看到您要执行的操作。据我所知,您不能将两个 socket.io 服务器绑定到同一个 Web 服务器并期望它们都获取所有 socket.io 消息。
-
@jfriend00 那么,实现带有和不带有身份验证的套接字的最佳解决方案是什么?这是我的 authsockets 和 sockets 。 gist.github.com/Talha089/75bcbd5133aae9052e3285a8b2e0c5acgist.github.com/Talha089/2e0f7793d18776ad384a1ffa80c5a046
-
我建议您使用 socket.io 命名空间,并且您需要对其中一个命名空间而不是另一个命名空间进行身份验证。两个命名空间都由同一个 socket.io 服务器提供服务,但您可以以不同方式处理每个命名空间(其中一个需要身份验证,而另一个不需要)。
-
@jfriend00 我已经使用了命名空间,如果我将它们添加到一个文件中,它可以正常工作,我想将它们放在不同的文件中,这样我的项目结构仍然很成熟。如果我将它们添加到其他文件中,它会连接第二个套接字:已验证或简单。
标签: javascript node.js websocket socket.io auth-token