J'étudie nodejs/socket.io pour un chat en temps réel et j'ai besoin de conseils pour la mise en place de salles.
Quel est le meilleur, utiliser un espace de noms ou la fonctionnalité room pour isoler complètement les groupes de participants les uns aux autres?
quelle est la vraie différence technique entre les salles et l'espace de noms?
Existe-t-il une différence d'utilisation des ressources?
Ceci est ce que les espaces de noms et les chambres ont en commun (socket.io v0.9.8 - veuillez noter que la v1.0 impliquait une réécriture complète. modifié):
Les différences :
io.connect(urlAndNsp)
(le client sera ajouté à cet espace de noms uniquement s'il existe déjà sur le serveur). )Pour ne pas confondre le concept avec le nom (room ou namespace), je vais utiliser compartiment pour faire référence au concept et aux deux autres noms pour implémentations = du concept. Donc si tu
Un exemple pour cette dernière serait une application client volumineuse dans laquelle différents modules, développés séparément (par exemple par des tiers), utilisant chacun indépendamment socket.io, sont utilisés dans la même application et souhaitent partager une seule connexion réseau.
N'ayant pas réellement comparé cela, il me semble que si vous avez simplement besoin de compartiments simples dans votre projet pour séparer et grouper les messages, l'un ou l'autre convient.
Pas sûr que cela réponde à votre question, mais les recherches qui ont conduit à cette réponse m'ont au moins aidé à voir plus clair.
C'est une vieille question mais après avoir fait quelques recherches sur le sujet, je trouve que la réponse acceptée n'est pas claire sur un point important. Selon Guillermo Rauch lui-même ( voir lien ): bien qu'il soit théoriquement possible de créer des espaces de nom de manière dynamique sur une application en cours d'exécution, vous les utilisez principalement en tant que sections distinctes prédéfinies de votre application. Si, par contre, vous devez créer des compartiments ad hoc, à la volée, pour accueillir des groupes d’utilisateurs/connexions, il est préférable d’utiliser des salles.
Cela dépend de ce que tu veux faire.
La principale différence est que chambres sont plus difficiles à mettre en œuvre. Vous devez créer une méthode pour joindre les salles à chaque rechargement de page.
Avec namespaces il vous suffit d’écrire var example = io.connect('http://localhost/example');
dans votre client javascript et le client est automatiquement ajouté dans le espaces de noms.
Exemple d'utilisation:
Les salles et les espaces de noms segmentent la communication et les prises individuelles de groupe.
Une diffusion dans une salle ou dans un espace de noms ne parviendra pas à tout le monde, mais uniquement aux membres.
La différence entre les espaces de noms et les salles est la suivante:
La différence est principalement qui les gère
Pour décider quoi utiliser, vous devez décider si la segmentation doit être gérée dans le frontend ou dans le backend
Les espaces de noms vous permettent de créer des objets portant le même nom, mais ils seraient séparés car ils vivront dans des espaces de noms différents, également appelés étendues.
C'est le même processus de réflexion que vous devriez avoir avec les espaces de noms Socket.IO. Si vous construisez une application Web modulaire Node, vous souhaiterez créer un espace de noms entre les différents modules. Si vous revenez au code de notre espace de noms, vous verrez que nous avons pu l'écouter de la même manière. Événements exacts dans différents espaces de noms. Dans Socket.IO, l'événement de connexion sur la connexion par défaut et l'événement de connexion sur un espace de noms/xxx sont différents. Par exemple, si vous aviez un système de discussion et de commentaires sur votre site et vouliez que les deux soient en temps réel. Vous pouvez créer l’ensemble d’une application Socket.IO qui ne vit que dans son propre contexte.
Cela serait également vrai si vous construisiez quelque chose à emballer et à installer. Vous ne pouvez pas savoir si quelqu'un utilise déjà certains événements dans l'espace de noms par défaut. Vous devez donc créer le vôtre et y écouter. Cela vous permet de ne pas marcher sur les pieds des développeurs qui utilisent votre paquet.
Les espaces de noms nous permettent de scinder des connexions dans différents contextes. Nous pouvons comparer cela à des salles, ce qui nous permet de regrouper des connexions. Nous pouvons alors avoir la même connexion pour joindre d'autres salles.
Les espaces de noms vous permettent de créer différents contextes dans lesquels Socket.IO doit travailler. Les salles vous permettent de regrouper les connexions client dans ces contextes.