我一直在使用node,socket.io和express进行基本的多房间聊天设置。基本上我希望人们可以通过访问任何网址http://domain.com/room/123
来加入房间,他们将加入socket.io中的123房间。所以有人可以加入任何号码的房间并将该链接发送给他们的朋友。
他们在聊天中的实际html文件是http://mydomain.com/room.html
。
在查看其他类似设置的代码之后,我把一些东西放在一起,但我不确定一些东西,因为它不能正常工作。
以下是相关代码:
---服务器---
var PORT = 3000;
var app = require('express')(),
server = require('http').createServer(app),
io = require('socket.io').listen(server);
server.listen(PORT);
app.get('/room/*', function (req, res){
res.sendfile(__dirname + '/room.html');
});
io.sockets.on('connection', function(socket){
socket.on('user_join', function(username, room_number){
socket.username = username;
socket.room = room_number;
socket.join(room_number);
});
socket.on('send_message', function(message){
socket.broadcast.to(socket.room).emit('update_chat', socket.username, message);
});
socket.on('disconnect', function(){
socket.leave(socket.room);
});
});
以下是客户端主html页面中的一些相关代码:
// Gets the 123 out of /room/123
var room = window.location.pathname.substring(6);
var socket = io.connect("http://mydomain.com:3000/room.html");
socket.on("connect", function(){
socket.emit('user_join', "Bob", room);
});
socket.on("update_chat", function(username, message){
addChatMessage(username, message);
messages.push({username : username, message : message});
});
但是,我认为我误解了快递路由或io.connect()
行。如果房间传递的URL如“/ room / 123”那么,我应该在io.connect()
行放什么?因为socket.on('connect', function()...
部分根本没有被调用,所以它由于某种原因没有连接。
我希望这是有道理的。