2012-12-03 30 views

cevap

3

prizler nesne teftiş ettikten sonra bu çözüm geldi: Bu konuda

socket.on('disconnect', function() { 
    var rooms = io.sockets.manager.roomClients[socket.id]; 
    for (var room in rooms) { 
     if (room.length > 0) { // if not the global room '' 
      room = room.substr(1); // remove leading '/' 
      console.log('user exits: '+room); 
      server.sockets.in(room).emit('bye'); 
     } 
    } 
}); 
+1

Ancak, bu çözümden, kullanıcının her odaya, yalnızca bıraktıkları değil, bağlandığından 'bye' yayılacağa benziyor. – Abadaba

+0

Kullanıcı bağlantıyı kestiğinde, tüm kanalları bırakır. Böylece tüm katılan kanallara hoşça kalkar. – Peter

+1

Tarayıcımdaki üç sekmede 3 farklı odaya katıldığımı ve sekme 3'ü kapattığımı varsayalım. 1 ve 2 numaralı odalarda güle güle mesajını görmemeliyim. Her sekmenin kendi soket kimliği var. – Abadaba

0

% 100 - ancak bir deneyin:

bir odaya bağlarken veya ekleme karışıma yeni kullanıcı, soket kendi kullanıcı adı veya kimliği veya bir şey hatırlamıyorum:

Sonra
socket.on('adduser', function(username){ 
    socket.username = username; 
    socket.join('room'); 
} 

odadan olayları bırakmak dinlemek:

socket.room.on('leave', function(){ 
    socket.broadcast.to(this).emit(socket.username + ' says seeya!'); 
} 

Yine de denemeye değer - Eminim buna benzer bir şey işe yaramazsa.

+0

Hayır, 'socket.room' undefined. –

+0

Haklısınız - sonuçta işe yaramaz - sadece bir abone ol/abonelikten çıkma işlevlerini eklemeniz gerekir - bu sohbet örneğini bir odadaki varlığı gösteren odalara göz atın - temelde yapmanız gerekenleri yapacağız. http://udidu.blogspot.ca/2012/11/chat-evolution-nodejs-and-socketio.html – Strat

+0

Teşekkürler ama gönderdiğiniz örnekte, istediğim şey 'server'ın disconnect()' işlevinde yapılır. .js ', burada kabul edilen cevapla aynı koda sahiptir ve bu, kullanıcının terk ettiği odayı manuel olarak bulmanız gerektiğinden, benim için ideal bir yol değildir. –

İlgili konular