Socket.IO订阅多个通道

Socket.IO订阅多个通道,socket.io,Socket.io,我想在Socket.IO上构建一个简单的聊天室系统,用户可以在其中创建一个新的聊天室,然后人们就可以开始聊天了 这听起来很简单,但随着Socket.IO 0.9.4的运行,在阅读了一些关于Socket.IO的文章后,我越来越困惑了。因此,我希望有人能为我提供使用0.9.4的指导: 我需要一种预订房间的方式。房间名称由用户选择。在房间中张贴消息时,用户应收到该消息。我应该如何编写服务器代码,我应该如何编写客户端代码 用户可以同时加入多个房间 我希望另一个系统向某个房间中的所有用户发送消息。此“另一

我想在Socket.IO上构建一个简单的聊天室系统,用户可以在其中创建一个新的聊天室,然后人们就可以开始聊天了

这听起来很简单,但随着Socket.IO 0.9.4的运行,在阅读了一些关于Socket.IO的文章后,我越来越困惑了。因此,我希望有人能为我提供使用0.9.4的指导:

  • 我需要一种预订房间的方式。房间名称由用户选择。在房间中张贴消息时,用户应收到该消息。我应该如何编写服务器代码,我应该如何编写客户端代码

  • 用户可以同时加入多个房间

  • 我希望另一个系统向某个房间中的所有用户发送消息。此“另一个系统”通过express处理的请求发送消息。我将如何编写该请求处理程序


  • 使用socket.io文件室功能,这一切都非常简单。请查看LearnBoost wiki上的文档

    它允许通过一个插座连接到多个房间。我用下面的代码编写了一个快速测试

    服务器

    io.sockets.on('connection',函数(客户端){
    在('订阅',功能(房间){
    控制台日志(“连接室”,房间);
    客户。加入(房间);
    })
    在('unsubscribe',函数(房间){
    控制台日志(“离开房间”,房间);
    客户离开(房间);
    })
    client.on('send',函数(数据){
    console.log(“发送消息”);
    io.sockets.in(data.room).emit('message',data);
    });
    });
    
    客户端

    var socket=io.connect();
    socket.on('message',函数(数据){
    控制台日志(数据);
    });
    emit('subscribe','roomOne');
    emit('subscribe','roomTwo');
    $(“#发送”)。单击(函数(){
    var room=$(“#room”).val(),
    message=$('#message').val();
    emit('send',{room:room,message:message});
    });
    
    从快速路线发送消息也很简单

    app.post('/send/:room/',函数(req,res){
    var房间=所需参数房间
    消息=req.body;
    io.sockets.in(room.emit('message',{room:room,message:message});
    res.end(“已发送消息”);
    });
    
    客户是否有办法离开两个房间中的任何一个?我不确定。您可以将这两个房间存储在一个阵列中,然后循环并取消订阅。或者可能有一个断开功能。(我从来没有用过这个)@kbariotis。创建一条类似于
    “离开”
    的消息,并让您的客户将其与希望离开的房间的名称一起发送。然后连接“断开”按钮以发送此类消息。服务器端,命令套接字离开给定的房间。@Timothy Strimple您不也应该听socket.on“disconnect”吗,这样,如果断开连接,用户将自动取消房间订阅,或者socket.io是否为我们处理此情况?根据socket.io文档():
    ,断开连接后,套接字自动离开它们所属的所有通道,您不需要特别拆卸。
    您解决了这个问题吗?如果是的话,你能给我指一下源代码吗?谢谢