基于/ link的Socket.io房间
我想实现使用socket.io
在我的node.js
项目聊天室。 我想创build一个基于任何访问该链接的所有人在该房间join的正斜杠链接的房间。
例如:
如果我的网站是nodeapp.com
,则可以通过访问nodeapp.com/funroom
来创build一个空间。 任何进入nodeapp.com/funroom
人(在房间里至less有一个人)可以全球聊天。
我不需要帮助实现聊天,只是房间。
非常感谢
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)您需要在服务器上获取房间名称并join:
// 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),input参数room
由URL定义。 然后我把这个参数作为一个javascriptvariables传递给客户端。 Jade模板看起来像这样:
html head script. room="#{room}"; script(src='/clientScript.js'); body ...
在客户端, clientScript.js
现在知道要join的空间。 您可以使用此系统执行更高级的房间请求。 例如,我根据URL中的多个参数拆分房间。