socket.io pokoje czy przestrzenie nazw?

Badam nodejs/socket. io na czacie w czasie rzeczywistym i potrzebuję porady przy wdrażaniu pokojów.

Który jest lepszy, używając przestrzeni nazw lub korzystając z funkcji pokoju, aby całkowicie odizolować od siebie rozmówców?

Jaka jest prawdziwa techniczna różnica między pokojami a przestrzenią nazw?

Czy jest jakaś różnica w wykorzystaniu zasobów?

Author: T J, 2012-06-07

3 answers

To właśnie przestrzenie nazw i pokoje mają wspólne (socket.io v0.9. 8-zauważ, że v1. 0 wymagało kompletnego przepisania, więc coś mogło się zmienić):

  • obie przestrzenie nazw (io.of ('/nsp') ) i rooms (socket.join ('pokój')) są tworzone po stronie serwera
  • wiele przestrzeni nazw i wiele pomieszczeń współdzielą to samo (WebSocket) połączenie
  • serwer będzie przesyłać wiadomości przez przewód tylko do tych klienci , którzy połączyli się z / dołączyli do pokoju nsp/, tzn. nie jest to tylko filtrowanie po stronie klienta

Różnice :

  • przestrzenie nazw są połączone przez Klienta za pomocą io.connect(urlAndNsp) (Klient zostanie dodany do tej przestrzeni nazw tylko wtedy, gdy już istnieje na serwerze)
  • Pokoje mogą być łączone tylko po stronie serwera (chociaż tworzenie API po stronie serwera, aby umożliwić klientom łączenie się, jest proste)
  • przestrzenie nazw mogą być autoryzacja chroniona
  • autoryzacja nie jest dostępna z pokojami , ale autoryzacja niestandardowa może być dodana do wyżej wymienionego, łatwego do utworzenia API na serwerze, w przypadku, gdy ktoś chce korzystać z pokoi
  • Pokoje są częścią przestrzeni nazw (domyślnie 'globalna' przestrzeń nazw)
  • przestrzenie nazw są zawsze zakorzenione w globalnym zasięgu

Aby nie mylić pojęcia z nazwą (pokój lub Przestrzeń nazw), użyję enklawa odnosząca się do pojęcia, a pozostałe dwie nazwy dla implementacji pojęcia. Więc jeśli

  • potrzebujesz autoryzacji dla przedziału , przestrzenie nazw mogą być najłatwiejszą drogą do pokonania
  • Jeśli chcesz hierarchicznie ułożone przedziały (maksymalnie 2 warstwy), użyj kombinacji przestrzeni nazw/pokoju
  • Jeśli aplikacja po stronie klienta składa się z różnych części ,które (same nie dbają o przedziały, ale) muszą być oddzielone od siebie, użyj przestrzeni nazw.

Przykładem dla tego ostatniego byłaby duża aplikacja kliencka, w której różne moduły, być może opracowane osobno (np. socket.io niezależnie, są używane w tej samej aplikacji i chcą współdzielić jedno połączenie sieciowe.

Nie mając tego w rzeczywistości, wydaje mi się, że jeśli potrzebujesz tylko prostych przedziałów w swoim projekcie do oddzielania i grupowania wiadomości, oba są w porządku.

Nie wiem, czy to odpowiada twoje pytanie, ale badania prowadzące do tej odpowiedzi przynajmniej pomogły mi zobaczyć jaśniej.

 181
Author: Eugene Beresovsky,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-08-20 01:49:26

To stare pytanie, ale po przeprowadzeniu pewnych badań na ten temat stwierdzam, że przyjęta odpowiedź nie jest jasna w ważnym punkcie. Według samego Guillermo Raucha (zobacz link ): chociaż teoretycznie możliwe jest dynamiczne tworzenie przestrzeni nazw w uruchomionej aplikacji, używasz ich głównie jako predefiniowanych oddzielnych sekcji aplikacji. Jeśli z drugiej strony musisz tworzyć przedziały ad hoc, w locie, aby pomieścić grupy użytkowników / połączeń, najlepiej jest użyć pokoje.

 45
Author: Julio Garcia,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-06-24 13:40:21

To zależy, co chcesz zrobić.

Główną różnicą jest to, że pokoje są trudniejsze do wdrożenia. Musisz zrobić metodę łączenia pokoi z każdym przeładowaniem strony.

Z przestrzeniami nazw wystarczy wpisać var example = io.connect('http://localhost/example'); w swoim kliencie javascript, a Klient zostanie automatycznie dodany do przestrzeni nazw.

Przykład wykorzystania:

  • pokoje: prywatny czat.
  • przestrzenie nazw: czat strony.
 10
Author: ,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-06-07 22:15:17