Socket.io加入一个房间注册房间,但只加入一个空的串房间

时间:2013-03-06 10:17:58

标签: node.js socket.io

我正在使用socket.io/node.js/express。当我使用socket.join('room')加入socket.io房间时,它会注册房间,但用户只能加入''房间。

此命令显示所有房间,它返回'房间'和'',即使我从未创建''房间:

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

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

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

此命令应向房间中的每个客户端广播一条消息。使用实际房间(data.chatroom)时失败。但是当你用 null 或''替换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'));
});

1 个答案:

答案 0 :(得分:5)

默认情况下,连接到套接字(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/

相关问题