2013-09-06 10 views
5

Próbuję skonfigurować system z sails.js, aby serwer wysyłał wiadomości do zestawu klientów. Zasadniczo:Sails.js + socket.io: Wysyłanie wiadomości z serwera do klientów

  1. Klient w grupie A wysyła żądanie AJAX do serwera.
  2. Serwer przetwarza żądanie i wysyła komunikat przez gniazdo do wszystkich klientów grupy B.
  3. Klienci grupy B odbierają komunikat za pośrednictwem gniazda i wyświetlają coś.

Zgodnie z dokumentacją socket.io powinienem mieć możliwość, aby klienci w grupie B przyłączyli się do "pokoju", a następnie aby serwer był nadawany w tym konkretnym pomieszczeniu, ale po stronie klienta "socket" nie ma metody "socket.join ('room')". Tak, próbowałem tylko wysyłanie wyjątkowe wydarzenie dla wszystkich klientów:

socket.on("connect", function(){ 
    console.log("Client Connected"); 
}); 

socket.on("my_event", function(data){ 
    console.log("my_event received"); 
}); 

To działa prawidłowo, wykonując „sails.io.sockets.emit (” my_event „{...})” na stronie serwera, ale czy to nie jest wysyłanie wydarzenia do każdego klienta? Mogłem sprawić, by nazwa wydarzenia była niepowtarzalna, coś w rodzaju "my_event_000" z identyfikatorem do określenia grupy, ale nadal niepotrzebnie wysyłałby zdarzenia do każdego klienta.

Czy powinienem używać "pokoi"? A jeśli tak, to w jaki sposób?

Odpowiedz

4

Aby to zrobić, żagle miałyby mieć model wspierający twoje "Grupy", a w akcji kontrolera mają gniazdo, aby zasubskrybować grupę z Group.subscribe(groupId, req.socket). Następnie możesz wysyłać wiadomości do określonej grupy za pomocą Group.publish(groupId, data).

Możesz także zasubskrybować dowolną nazwę pomieszczenia w kontrolerze przy użyciu req.listen(groupId) i nadać do tego pokoju z req.broadcast(roomName, data).

Wszystko to w wersji Sails documentation for working with Sockets!

+1

Czy możesz podać bardziej konkretny przykład, proszę. Przyda się trochę więcej kodu. Nie można znaleźć rzeczy grupy w podanym linku. –

+0

Grupa to nazwa modelu w przykładzie. W dokumentach są one wymienione jako 'Model.subscribe',' Model.publish' itd. – sgress454

Powiązane problemy