我正在尝试使用此法语教程学习nodejs,以便与nodejs进行聊天https://www.youtube.com/watch?v=8jkkd2Ohte8
但我不能让离开房间的用户。
Server.js
var http = require('http');
httpServer = http.createServer(function(req, res){
// some magic
});
httpServer.listen(1337);
var io = require('socket.io').listen(httpServer);
var users = {};
io.sockets.on('connection', function(socket){
var user = false;
for(var k in users){
socket.emit('newUser', users[k]);
}
socket.on('login', function(user){
user = user;
users[user.id] = user;
io.sockets.emit('newUser', user);
});
// HERE IS THE PROBLEM
socket.on('disconnect', function(){
console.log('LOGOUT');
console.log(user);
if(!user){
return false;
}
delete users[user.id];
io.sockets.emit('logout', user)
});
});
我的client.js
(function($){
var socket = io.connect('http://localhost:1337');
var rand = Math.floor((Math.random() * 1000) + 1);
socket.emit('login', {
id : rand,
username : 'Guest' + rand
})
socket.on('newUser', function(user){
$('#users').append('<li id="u'+ user.id +'"><a href="http://rencontre-ados.net/profil'+ user.id +'">'+ user.username + '</a></li>');
});
socket.on('logout', function(user){
$('#users #u'+ user.id).remove();
});
})(jQuery);
当我断开聊天时,我的控制台会显示LOGOUT,但用户 false ,因此我无法从已连接用户列表中删除该ID。
答案 0 :(得分:1)
您需要通过socket.id将用户保存在用户中,因为您可以在disconnect事件中访问socket.id:
socket.on('login', function(user){
users[socket.id] = user; // <<<<< use socket.id
io.sockets.emit('newUser', user);
});
socket.on('disconnect', function(){
var user = users[socket.id]; // <<<< use socket.id
console.log('LOGOUT');
console.log(user);
io.sockets.emit('logout', user)
delete users[socket.id];
});
答案 1 :(得分:0)
更改
user = user;
要
this.user = user;
您正在同一范围内重新分配变量user
。您的目标是操纵父范围。