2013-03-06 98 views
3

我使用的是socket.io/node.js/express。当我使用socket.join('room')加入一个socket.io房间时,它会注册房间,但用户只能加入房间。加入房间的Socket.io注册房间,但只加入空字符串房间

此命令显示所有房间,两者都返回“房间”和“”,尽管我从来没有创建的'房间:

console.log(io.sockets.manager.rooms); // ['room', ''] 

此命令显示所有房间的客户端已经加入,并它返回一个空字符串'':

console.log(io.sockets.manager.roomClients[socket.id]); // [''] 

该命令应该向房间中的每个客户端广播消息。使用实际房间(data.chatroom)时失败。但是,当你与或'替代data.chatroom,它将广播消息为空字符串房间:

io.sockets.in(data.chatroom).emit('broadcast_message', {message: data.message, handle: data.handle}); 

任何帮助,将不胜感激,这是很奇怪的现象:(

编辑:这里是有关服务器代码

var express = require('express'), 
app = express(), 
http = require('http'), 
server = http.createServer(app), 
io = require('socket.io').listen(server), 
routes = require('./routes'), 
chatroom = require('./routes/chatroom'), 
path = require('path'); 

io.configure(function() { 
    io.set("transports", ["xhr-polling"]); 
    io.set("polling duration", 10); 
}); 

io.sockets.on('connection', function (socket) { 
    socket.on('join_room', function(data) { 
     socket.join(data.chatroom); 
     socket.emit('joined_room', data.chatroom); 
    }); 

    socket.on('send_message', function (data) { 
     io.sockets.in(data.chatroom).emit('broadcast_message', {message: data.message, handle: data.handle}); 
    }); 
}); 

app.configure(function(){ 
    app.set('port', process.env.PORT || 3000); 
    app.set('views', __dirname + '/views'); 
    app.set('view engine', 'jade'); 
    app.use(express.favicon()); 
    app.use(express.logger('dev')); 
    app.use(express.bodyParser()); 
    app.use(express.cookieParser()); 
    app.use(express.methodOverride()); 
    app.use(app.router); 
    app.use(express.static(path.join(__dirname, 'public'))); 
}); 

app.get('/', routes.index); 
app.get('/room/:chatroom', chatroom.create_room); 

server.listen(app.get('port'), function(){ 
    console.log("Express server listening on port " + app.get('port')); 
}); 

回答

4

默认情况下,每一个连接到插座(socket.io服务器)被分配到由空对象或数组代表一个空房间的客户,我可以”现在还记得,

下面是我用来连接客户端的房间代码:

socket.room = "room1"; 
socket.join(socket.room); 

,这是你如何发送消息:socket.sockets.in(client.room).emit("update", "A person has connected to " + room.name + " room.");

我想你错过了socket.room位。看一看这个仓库:https://github.com/tamaspiros/advanced-chat

以及相应的文章:

http://tamaspiros.co.uk/2013/07/15/advanced-chat-using-node-js-and-socket-io-episode-1/