【问题标题】:Socket.io rooms based on /link基于 /link 的 Socket.io 房间
【发布时间】:2015-07-14 07:28:16
【问题描述】:

我想在我的node.js 项目中使用socket.io 实现聊天室。我想根据访问的任何正斜杠链接创建一个房间,所有访问该链接的人都加入了该房间。

例如:

如果我的网站是nodeapp.com,则可以通过转到nodeapp.com/funroom 来创建房间。任何去nodeapp.com/funroom的人(房间里至少有1个人)都可以全局聊天。

我不需要帮助实现聊天,只需要聊天室。

非常感谢

【问题讨论】:

    标签: node.js socket.io


    【解决方案1】:

    1) 您需要将房间名称发送到服务器:

    // Client
    var socket = io('/');
    socket.emit('joinroom', window.location.pathname);
    socket.on("new user", function(data) {
        console.log("New user. Total users: ", data);
    });
    

    2) 你需要在服务器上获取房间名称并加入:

    // Backend
    var io = require('socket.io')();
    var rooms = {};
    io.on('connection', function(socket) {
        socket.on('joinroom', function(room) {
            this.join(room);
            if (typeof rooms[room] ==== "undefined") rooms[room] = {};
            rooms[room].count = rooms[room].total ? rooms[room].total+1 : 1; 
            io.to(room).emit("new user", rooms[room].count)
        });
    });
    

    【讨论】:

    • 它说不能得到 /whateverIEnter
    【解决方案2】:

    我为我的大学编写了一个类似的应用程序,使用以下设置:

    用户浏览到nodeapp.com/desiredRoom。我的快递服务器有以下路线:

    app.get("/:roomName", function(res, req){
        res.render("student", {room:req.params.roomName});
    })
    

    这会呈现一个模板(使用 Jade),输入参数 room 由 URL 定义。然后我将此参数作为 javascript 变量传递给客户端。 Jade 模板如下所示:

    html
        head
            script.
                room="#{room}";     
                script(src='/clientScript.js');
    body
        ...
    

    在客户端,clientScript.js 现在知道要加入哪个房间。您可以使用此系统执行更高级的房间请求。例如,我根据 URL 中的多个参数拆分房间。

    【讨论】:

      猜你喜欢
      • 2019-06-13
      • 2019-05-13
      • 1970-01-01
      • 2016-05-05
      • 1970-01-01
      • 2019-03-02
      • 2011-12-02
      • 1970-01-01
      • 2017-05-10
      相关资源
      最近更新 更多