Node.js 仅将事件发送到具有Socket.io的文件室组合中的客户端

Node.js 仅将事件发送到具有Socket.io的文件室组合中的客户端,node.js,socket.io,Node.js,Socket.io,假设我在Node.js应用程序和Socket.IO中有一组不同运动的房间(“足球”、“篮球”、“网球”…)和一组城市房间(“巴黎”、“伦敦”、“柏林”…) 是否可以只向伦敦对足球感兴趣的人发送和举办活动? 比如: io.sockets.in('london').in('football').emit('event_name', data); 还是糟糕的设计 提前感谢。您可以通过多种方式解决此问题 您可以拥有房间,并且想要收听足球赛事 io.sockets.in('london').emit(

假设我在Node.js应用程序和Socket.IO中有一组不同运动的房间(“足球”、“篮球”、“网球”…)和一组城市房间(“巴黎”、“伦敦”、“柏林”…)

是否可以只向伦敦对足球感兴趣的人发送和举办活动? 比如:

io.sockets.in('london').in('football').emit('event_name', data);
还是糟糕的设计


提前感谢。

您可以通过多种方式解决此问题

  • 您可以拥有房间,并且想要收听
    足球
    赛事

    io.sockets.in('london').emit('football',/*data*/)

  • 如果应用程序使用
    /london
    /london/football

    你可以在('football').emit('update'),/*data*/中执行('/london')的io.in('football')。这意味着在route
    /london
    in room
    football
    中发出一个
    更新
    事件。在我看来,它的速度稍微快一点,因为它不会将许多用户分组到一个房间中,而是使用名称空间来处理emit事件

  • 每个城市和兴趣的房间。
    io.sockets.in('london:football')
    这是一个特定城市和体育项目的房间。
    这个房间里的每个人都可以了解足球运动的最新情况


第一个选项会产生大量不必要的流量,这正是我试图避免使用房间的原因。第二个选项,我不确定是否可以使用它。据我所知,每个客户端只能同时在一个命名空间中,对吗?第三个选项是我已经想到的,如果找不到更好的解决方案,我可能会这样做,b但在我的情况下,我必须做很多组合。在应用程序中维护很多房间是否昂贵?谢谢。