2011-09-20 7 views
5

Nie mówię tak naprawdę o ogólnej aplikacji do czatu, ale raczej o implementacji czatu.Dyskusja: Najlepszy sposób na zaimplementowanie czatu za pomocą pliku node.js/socket.io?

Więc node.js/socket.io, myślałem o dwóch podejściach

  1. Utwórz tablicę dla każdego czatu, nadawanie wiadomości do wszystkich użytkowników w tablicy

  2. Broadcasts wszystkie wiadomości do wszystkich użytkownicy na komputerach klientów określają, czy należą do czatu, jeśli tak, zaakceptuj wiadomość.

Słabość w 1 jest to, że w końcu, jak skalowanie będzie zalewać pamięci serwera z obiektów tablicy, a ja korzystając tylko około 80 MB na moim hostingu.

Słabością w 2 jest to, że nadawanie wszystkim jest kosztowne, a powodzie, że maszyny klientów nie uszczęśliwią ich.

Jestem pewien, że istnieją lepsze podejścia do wdrażania czatu, dlatego proszę was o pomoc. Poszukuję wydajności po stronie serwera po stronie klienta i musi być skalowalna.

+0

Z 80MB można utworzyć wiele czatów. Twoje tablice muszą tylko przechowywać identyfikatory użytkownika. Czy uruchomiłeś jakieś testy zużycia pamięci? – user123444555621

+0

Zrobiliśmy funkcjonujący [multi-room chatroom] (https://github.com/Raynos/so642). To jest open source, nie krępuj się. – Raynos

+0

@ pumbaa80 prawda, ale 80mb staje się jak 20-30mb po uruchomieniu wielu innych procesów lub zadań crona, które mogą być potrzebne, a nadal nie sądzę, że jest to dobry sposób na skalowanie, ponieważ pamięć jest droga ... – Derek

Odpowiedz

1

Zrobiłem coś podobnego tutaj:

http://davidgranado.com/demos/chat_shuffle/

można przetestować go poprzez otwarcie kilku okien i rozmawiając ze sobą, ponieważ każdy przypadek jest uważany za osobę (to moja pierwsza aplikacja węzeł).

Sposób działania polega na tym, że każda osoba jest powiązana z inną osobą do rozmowy. W rzeczywistości wszyscy są w pokoju dwuosobowym.

Aby przekazać komunikaty, rejestruję użytkowników jako powiązanych ze sobą i wysyłam tylko do jednego rozmówcy. Pomysł ten można łatwo rozszerzyć o dowolną liczbę osób, które kojarzą chatters. W ten sposób nie musisz wykonywać nieekonomicznej transmisji dla wszystkich.

+1

, więc powiedz, że masz osobę1, osobę2, osobę3, w jaki sposób serwer wie, że wysyła im całą wiadomość/wie, że jest na czacie bez zadeklarowania tablicy do grupowania ich na czacie, tak jak w moim podejściu 1? – Derek

+0

Myślę, że mój mózg nie jest tak ostry w tym momencie, jak myślałem. To w zasadzie to samo. W tej chwili nie używam tablicy jako takiej, ponieważ to tylko dwie z nich. Ale aby rozwinąć pomysł, tablica byłaby idealna dla czatu, aby wiedzieć, do kogo transmitować. –

5

Socket.IO 0.7+ wprowadził koncepcję pokoje. To jest prawdopodobnie to, czego szukasz.

io.sockets.on('connection', function (socket) { 
    socket.join('room name'); 

    // broadcast the message to everybody in the room 
    socket.on('chat message', function (data) { 
    socket.broadcast.to('room name').emit('chat message', data); 
    }); 

    socket.on('leave room', function (room) { 
    socket.leave(room); 
    }); 
}); 

Więc nie ma potrzeby, aby zarządzać własną tablicę z użytkownikami dla poszczególnych pomieszczeń, socket.io ma ten build w.

+0

tego nie wiedziałem, sprawdzę, w jaki sposób implementują funkcję socket.join(). Ale najpierw, gdzie znajdują się dokumentacje socket.io? – Derek

+0

README na: https://github.com/learnboost/socket.io https://github.com/learnboost/socket.io-client Witryna http://socket.io/ I na wiki https://github.com/learnboost/socket.io/wiki – 3rdEden

+0

Przygotowałem [wersję demonstracyjną czatu multiroom] (https://github.com/jgonera/socket.io-multichat) używając pokoi Socket.IO. Wyposażony jest w benchmark, który pozwala sprawdzić, jak szybko może być. –

Powiązane problemy