Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/42.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 Socket.io赢得';t将消息发送到Disconect上的房间_Javascript_Node.js_Angularjs_Sockets - Fatal编程技术网

Javascript Socket.io赢得';t将消息发送到Disconect上的房间

Javascript Socket.io赢得';t将消息发送到Disconect上的房间,javascript,node.js,angularjs,sockets,Javascript,Node.js,Angularjs,Sockets,基本上,我正在尝试使用Node.JS和angular创建一个快速聊天室 我已经使用了其他套接字事件,它们工作了,我不太明白为什么它们现在不想工作。真正奇怪的是,登录工作正常,但当涉及到注销,甚至使用我的断开连接方法时,服务器端没有发生任何事情,使用断开连接功能,console.log工作正常。但它不会发射 在角度方面,所有myconsole.log都在运行,但在注销或卸载时,服务器上没有发生任何事件 在节点内部,我有三个事件 socket.on('chat:userLogin', functi

基本上,我正在尝试使用Node.JS和angular创建一个快速聊天室

我已经使用了其他套接字事件,它们工作了,我不太明白为什么它们现在不想工作。真正奇怪的是,登录工作正常,但当涉及到注销,甚至使用我的断开连接方法时,服务器端没有发生任何事情,使用断开连接功能,
console.log
工作正常。但它不会发射

在角度方面,所有my
console.log都在运行,但在注销或卸载时,服务器上没有发生任何事件

在节点内部,我有三个事件

 socket.on('chat:userLogin', function(user) {
    socket.join('online-users');
    chatRoom[user.id] = user
    console.log('User Has logged in, chat room contains: ', chatRoom);
    io.sockets.in('online-users').emit('chat:usersOnline', chatRoom)
  })

  socket.on('chat:userLogout', function(userId) {
    console.log('User Id ' + userId + 'is logging out');
    delete chatRoom[userId]
    console.log('User Has logged out, chat room contains: ', chatRoom);
    io.sockets.in('online-users').emit('chat:userLeave', chatRoom);
    socket.leave('online-users');
  })

  socket.on('disconnect', function() {
    var userRoom = rooms[socket.roomId]

    if (chatRoom[socket.userId])
      delete chatRoom[socket.userId]

    io.sockets.in('online-users').emit('chat:userLeave', socket.userId);
    console.log('Emitting that users have left to: ', io.sockets.in('online-users'));
    socket.leave('online-users');
  }
在角度上,我有两个函数,它们发出这两个事件

  this.logout = function(userId) {
      console.log('Logging user out: ', userId);
      Socket.emit('chat:userLogout', userId);
      console.log('Logged out user?');
      delete this.userStore[userId]
    }

    this.login = function(userId) {
      console.log('Getting online user ', userId);
      var self = this;
      User.get({id: userId}, function(user) {
        self.userStore[userId] = user;
        Socket.emit('chat:userLogin', user);
      });
    }

它可能会解决您的问题,但您应该使用socket.broadcast.to('roomname'),除非您希望将消息发送到房间中的所有套接字(包括发送消息的套接字)。所以你的代码看起来像

socket.on('chat:userLogin', function(user) {
   socket.join('online-users');
   chatRoom[user.id] = user
   console.log('User Has logged in, chat room contains: ', chatRoom);
   // emit to everyone else except the sender
   socket.broadcast.to('online-users').emit('chat:usersOnline', chatRoom);
})

socket.on('chat:userLogout', function(userId) {
   console.log('User Id ' + userId + 'is logging out');
   delete chatRoom[userId]
   socket.leave('online-users');
   // leaving the chat room here means we can emit to all people in the room
   io.sockets.in('online-users').emit('chat:userLeave', chatRoom);
   console.log('User Has logged out, chat room contains: ', chatRoom);

})

socket.on('disconnect', function() {
   var userRoom = rooms[socket.roomId]

   if (chatRoom[socket.userId])
      delete chatRoom[socket.userId]

   socket.leave('online-users');
   io.sockets.in('online-users').emit('chat:userLeave', socket.userId);

   console.log('Emitting that users have left to: ', io.sockets.in('online-users'));
}
查看更多信息