Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/43.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript Node.js Socket.io-如何将消息发送到另一个侦听器中的套接字室?_Javascript_Node.js_Sockets_Socket.io - Fatal编程技术网

Javascript Node.js Socket.io-如何将消息发送到另一个侦听器中的套接字室?

Javascript Node.js Socket.io-如何将消息发送到另一个侦听器中的套接字室?,javascript,node.js,sockets,socket.io,Javascript,Node.js,Sockets,Socket.io,我试图将消息发送到特定的房间,一旦客户机触发了“joinedRoom”侦听器,如果我将代码放在joinedRoom侦听器之外,代码就可以正常工作,否则它什么也不做 代码: app.get('/room/:room/user/:user', function(req, res){ var room = { username: req.params.user, roomname: req.params.room }; res.render('r

我试图将消息发送到特定的房间,一旦客户机触发了“joinedRoom”侦听器,如果我将代码放在joinedRoom侦听器之外,代码就可以正常工作,否则它什么也不做

代码:

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;
}
我看到了文档和一些示例代码,一切似乎都是正确的(当涉及到简单的语法时),我是否遗漏了一些简单的东西


谢谢!

我认为您需要在连接事件侦听器之外注册断开连接事件侦听器

代码:


对于那些可能有类似问题的人,代码基本上是正确的,但我忽略了这一点:

而不是:

socket.emit('joinedRoom', roomData);
应该是:

socket.on('connect', function(){
    socket.emit('joinedRoom', roomData);
})

:)

Hello@Yod谢谢你的帮助,我按照你的建议做了,但没有成功,有趣的是,如果我完全删除joinedRoom侦听器,它就会成功。。。。
socket.emit('joinedRoom', roomData);
socket.on('connect', function(){
    socket.emit('joinedRoom', roomData);
})