2016-05-22 2 views
0

J'ai une application socket.io qui doit gérer beaucoup d'espaces de noms. Je me demande quelle est la limite du nombre d'espaces de noms socket.io instance peut gérer, y at-il un problème si je crée comme 10 espaces de noms. Comment puis-je mettre à l'échelle pour faire quelque chose comme scharding à travers plusieurs instances socket.io (chaque instance gère 1k namespance par exemple). En fait, je peux redimensionner juste pour prendre en charge plusieurs utilisateurs, mais toutes mes instances doivent gérer tous les espaces de noms.Limite de l'espace de noms Socket.io et comment le mettre à l'échelle

Update1:

Le problème que je suis en train de résoudre est le suivant, j'ai un jeu de cartes multi-joueurs (comme le poker) et chaque chambre, où 4 joueurs jouent le jeu, est modélisé par socketio espace de noms. Puisque je m'attends à des milliers de joueurs simultanés, mon instance de socketio devrait gérer ce nombre d'espaces de noms. J'ai déjà implémenté la solution d'évolutivité expliquée en Socket.io website. Lorsque je redimensionne, cet extrait de noeud que je cours dans la nouvelle instance peut gérer tous les espaces de noms créés auparavant.

Alors
rooms.forEach(function(room){ 
    var socketRoom = io.of('/room/' + room.id) 
    .on('connection', function(mySocket){ 
     return handleTableSocket(mySocket, socketRoom, room); 
    }); 
}); 

est-il une bonne idée de modéliser chaque salle de jeux avec socketio espace de noms? Que faire si le nombre d'espaces de noms augmente?

Vive

Répondre

1

Un espace de noms dans socket.io est juste un objet Javascript et il y a un objet maître qui maintient un index de tous les objets d'espace de noms existants. Il n'y a pas de limite inhérente au nombre de ressources que vous pouvez avoir, hormis la quantité de mémoire consommée par les objets Javascript et leurs données d'instance dans votre processus ndoe.js. Il semble qu'un test rapide où vous créez le nombre d'espaces de noms dont vous avez besoin et mesurez leur consommation de mémoire serait un bon premier pas.

Vous pouvez redimensionner socket.io dans node.js en déployant plusieurs processus node.js. Le concept général est discuté ici sur le site socket.io (Using multiple nodes). Ce schéma général fonctionne en utilisant redis pour gérer les données qui veulent être partagées entre plusieurs instances. Ce schéma ne crée pas de préférence pour un utilisateur spécifique sur une instance spécifique. Si vous vouliez faire quelque chose comme ça, afin d'avoir seulement des espaces de noms dans chaque instance, alors cela pourrait probablement être fait avec un codage personnalisé, mais vous devrez en expliquer beaucoup plus sur le problème que vous essayez de résoudre. nous avoir beaucoup d'idée sur la façon d'aborder cela. Encore une fois, si vous partagiez votre problème réel que vous essayiez de résoudre (plutôt que simplement votre solution), nous pourrions probablement trouver une solution plus efficace que 10k namespaces réels en utilisant vos propres structures de données qui sont plus ciblé sur votre problème spécifique qu'un espace de noms générique.

+1

@ hamou92 - Y a-t-il une raison pour laquelle vous ne modélisez pas chaque jeu en tant que «pièce» au lieu d'un espace de noms. Je crois qu'une pièce est un objet plus léger dans socket.io qu'un espace de noms et je pense qu'une pièce te donnerait toujours les caractéristiques de communication que vous voudriez. – jfriend00

+0

J'ai fait quelques recherches avant de faire un choix. Il semble que les espaces de noms donnent plus de séparation http://stackoverflow.com/questions/10930286/socket-io-rooms-or-namespacing – hamou92

+0

@ hamou92 - Cela a-t-il répondu à votre question? – jfriend00