我使用的是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'));
});