2013-03-06 103 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/