Node.js Socket.io – 如何将消息发送到监听器中的特定房间?

我试图发送消息给特定的房间,一旦“joinedRoom”侦听器被客户端触发,代码工作正常,如果我把我的代码放在joinRoom侦听器之外,否则它什么都不做。

码:

app.get('/room/:room/user/:user', function(req, res){ var room = { username: req.params.user, roomname: req.params.room }; res.render('room', room); }); var users = {}; io.sockets.on('connection', function (socket) { socket.on('joinedRoom', function(roomData){ socket.username = roomData.username; socket.room = roomData.roomname; console.log("Roomname: " + socket.room); console.log("Username: " + socket.username); socket.join(socket.room); socket.broadcast.to(socket.room).emit('newUser', socket.username); socket.on('disconnect', function(){ socket.broadcast.emit('userLeft', socket.username); socket.leave(socket.room); console.log('Connection id: ' + socket.id); }); }); }); 

客户代码:

 var socket, roomname, ioRoom; var socket = io.connect('http://localhost:3000'); socket.on('enterRoom', function(roomname){ console.log("ENTERED ROOM: " + roomname); }); socket.on('newUser', function(username){ pushUserName(username); pushUserStatus(username, ' has joined the room <br/>') }); socket.on('newRoom', function(data){ alert(data) }); socket.on('userLeft', function(username){ pushUserStatus(username, ' has left the room <br/>') }) function pushUserName(username){ var el = document.getElementById("username"); el.innerHTML += username + '<br/>'; } function pushUserStatus(username, message){ var el = document.getElementById("joined"); el.innerHTML += username + message; } 

我看到了文档和一些示例代码,它似乎是正确的(当它只是语法)我在这里错过了一些简单的东西?

谢谢!

编辑(joinedRoom发射器):

 doctype html head title Sala #{roomname} script(src="https://cdn.socket.io/socket.io-1.4.5.js") script(type="text/javascript"). var socket = io.connect('http://localhost:3000'); var roomData = { roomname: '#{roomname}', username: '#{username}' } socket.emit('joinedRoom', roomData); script(src="../../../js/room.js") body p#joined h1 Room's name: #{roomname} h2 Your nickname: #{username} h2 Players: p#username.player-row