2011-07-17 11 views
12

Jaki jest właściwy sposób zarządzania wieloma pokojami czatowymi za pomocą socket.io?Jaki jest właściwy sposób zarządzania wieloma pokojami rozmów za pomocą socket.io?

Więc na serwerze nie będzie coś jak:

io.sockets.on('connection', function (socket) { 
    socket.on('message', function (data) { 
    socket.broadcast.emit('receive', data); 
    }); 
}); 

Teraz to będzie działać dobrze dla jednego pomieszczenia, gdyż rozgłasza komunikat się do wszystkich, którzy są podłączone. Jak jednak wysyłasz wiadomości do osób, które są w konkretnych pokojach czatu?

Dodaj .of ("/ chat/room_name")? Lub przechowywać wachlarz wszystkich w pokoju?

Odpowiedz

18

Socket.IO v0.7 teraz daje jeden Socket za nazw można zdefiniować:

var room1 = io.connect('/room1'); 
room1.on('message', function() { 
    // chat socket messages 
}); 
room1.on('disconnect', function() { 
    // chat disconnect event 
}); 

var room2 = io.connect('/room2'); 
room2.on('message', function() { 
    // chat socket messages 
}); 
room2.on('disconnect', function() { 
    // chat disconnect event 
}); 

Z różnych gniazd, można selektywnie wysłać do konkretnej przestrzeni nazw, który chcesz.

Socket.IO v0.7 ma również pojęcia "pokój"

io.sockets.on('connection', function (socket) { 
    socket.join('a room'); 
    socket.broadcast.to('a room').send('im here'); 
    io.sockets.in('some other room').emit('hi'); 
}); 

Źródło: http://socket.io/#announcement

+0

Dzięki, myślę, że drugim przykładem jest to, czego szukam, ponieważ pokoje są tworzone dynamicznie. Powiedzmy więc, że mam dwie sekcje, czat i grupy. Czy zrobiłbym io.connect ("/ chat OR/group") i mam socket.join ("GROUP OR CHAT ID"), aby połączyć się z określoną grupą lub czatem? –

+0

Tak sądzę. Pierwsza z nich pozwala mieć różne kanały do ​​subskrypcji, a druga daje prostą koncepcję pomieszczenia, w którym można grupować różne gniazda. – sntran

2

Aktualizacja: Obie Now.js i most są już martwe, patrz now.js dead i bridge dead. Wydaje się, że Socket.io przyjęło funkcję wywołania zwrotnego od wersji 0.9, co jest dobrym krokiem naprzód.

Mimo że nie jest bezpośrednio powiązany Socket.io, Now.js (wyższy poziom abstrakcji ontop Socket.io) obsługuje grupy - http://nowjs.com/doc

Mają przykład wielu pomieszczeń, czat ich offocial repo tutaj: https://github.com/Flotype/now/blob/master/examples/multiroomchat_example/multiroomchat_server.js

+0

Ten projekt może być martwy, strona internetowa to 404, a ostatnie zatwierdzenie miało miejsce rok temu. – jcollum

+0

@jcollum poprawny, zaktualizowany post. – balupton

Powiązane problemy