Socket.io房间基于/链接

时间:2015-07-12 23:08:47

标签: node.js socket.io

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

例如:

如果我的网站为nodeapp.com,则可以转到nodeapp.com/funroom创建一个房间。任何前往nodeapp.com/funroom(房间内至少有1人)的人都可以在全球聊天。

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

非常感谢

2 个答案:

答案 0 :(得分: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)
    });
});

答案 1 :(得分:1)

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

用户浏览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中的多个参数拆分房间。