【发布时间】:2015-07-14 07:28:16
【问题描述】:
我想在我的node.js 项目中使用socket.io 实现聊天室。我想根据访问的任何正斜杠链接创建一个房间,所有访问该链接的人都加入了该房间。
例如:
如果我的网站是nodeapp.com,则可以通过转到nodeapp.com/funroom 来创建房间。任何去nodeapp.com/funroom的人(房间里至少有1个人)都可以全局聊天。
我不需要帮助实现聊天,只需要聊天室。
非常感谢
【问题讨论】:
我想在我的node.js 项目中使用socket.io 实现聊天室。我想根据访问的任何正斜杠链接创建一个房间,所有访问该链接的人都加入了该房间。
例如:
如果我的网站是nodeapp.com,则可以通过转到nodeapp.com/funroom 来创建房间。任何去nodeapp.com/funroom的人(房间里至少有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)
});
});
【讨论】:
我为我的大学编写了一个类似的应用程序,使用以下设置:
用户浏览到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 中的多个参数拆分房间。
【讨论】: