Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/34.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/lua/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Node.js socket.io我应该使用什么文件室或名称空间?_Node.js_Socket.io - Fatal编程技术网

Node.js socket.io我应该使用什么文件室或名称空间?

Node.js socket.io我应该使用什么文件室或名称空间?,node.js,socket.io,Node.js,Socket.io,我正在开发一个聊天应用程序,但我不知道是否应该使用聊天室或名称空间,以及如何使用 我的应用程序大致如下所示: 体育(频道) 体育频道(子频道) 体育频道(子频道) 政治(频道) 政治A(副频道) 政治组B(副频道) 政治科(副频道) 等等 我的要求: 非身份验证用户只能读取通道中的邮件。 身份验证用户可以在通道和子通道中读取和写入消息 非授权用户可以同时在多个通道中(加入和离开)。 身份验证用户可以同时在多个通道和子通道中(加入和离开)。 这意味着 这有点复杂,因此我不知道应该在哪里使用

我正在开发一个聊天应用程序,但我不知道是否应该使用聊天室或名称空间,以及如何使用

我的应用程序大致如下所示:

体育(频道)

  • 体育频道(子频道)
  • 体育频道(子频道)
政治(频道)

  • 政治A(副频道)
  • 政治组B(副频道)
  • 政治科(副频道)
等等

我的要求:

非身份验证用户只能读取通道中的邮件。 身份验证用户可以在通道和子通道中读取和写入消息

非授权用户可以同时在多个通道中(加入和离开)。 身份验证用户可以同时在多个通道和子通道中(加入和离开)。 这意味着

这有点复杂,因此我不知道应该在哪里使用文件室、名称空间以及如何处理身份验证

现在我有了一个默认的名称空间“/”,通道和子通道都是房间,但在哪里执行身份验证以不阻止非身份验证用户

io.use((socket, next) => {
  if (socket.handshake.query && socket.handshake.query.token) {
    jwt.verify(socket.handshake.query.token, process.env.JWT_SECRET, (err, decoded) => {
      if (err) return next(new Error('Socket authentication error'));
      socket.decoded = decoded;
      next();
    });
  } else {
    next(new Error('Socket authentication error'));
  }
});

基本上,当您需要单独的端点或路径时,可以使用
名称空间。
根据官方文件

这是一个非常有用的功能,可以最大限度地减少资源数量(TCP) 连接),同时在您的内部分离关注点 通过在通信信道之间引入分离来实现应用

//服务器
常量sportsIo=io.of('/s');
运动IO.on('连接'),功能(插座){
log(“有人连接”);
});
所以本质上这意味着对于每个名称空间,您的客户端(webapp)必须创建一个单独的连接

//客户端
const sportsIo=io(“/sports”);
const politicsIo=io(“/politics”);
现在,对于每个名称空间,您可以有一个或多个与套接字可以加入和离开的
房间
(或
频道
)相关联

//服务器
//在某个时刻,当你想去通道(房间)时
体育运动:发射(某个事件);
//客户端
运动IO.on('连接'),功能(插座){
socket.join('Sport_A');
socket.join('Sport_B');
});

有关更多信息,请参阅。

基本上,当您需要单独的端点或路径时,可以使用
名称空间。
根据官方文件

这是一个非常有用的功能,可以最大限度地减少资源数量(TCP) 连接),同时在您的内部分离关注点 通过在通信信道之间引入分离来实现应用

//服务器
常量sportsIo=io.of('/s');
运动IO.on('连接'),功能(插座){
log(“有人连接”);
});
所以本质上这意味着对于每个名称空间,您的客户端(webapp)必须创建一个单独的连接

//客户端
const sportsIo=io(“/sports”);
const politicsIo=io(“/politics”);
现在,对于每个名称空间,您可以有一个或多个与套接字可以加入和离开的
房间
(或
频道
)相关联

//服务器
//在某个时刻,当你想去通道(房间)时
体育运动:发射(某个事件);
//客户端
运动IO.on('连接'),功能(插座){
socket.join('Sport_A');
socket.join('Sport_B');
});

有关更多信息,请参阅。

@jfriend00我发现你的答案对其他套接字问题非常有用,你能帮我解答这个问题吗?@jfriend00我发现你的答案对其他套接字问题非常有用,你能帮我解答这个问题吗?