2010-11-16 3 views
2

Je construis une application de productivité basée sur le Web qui doit gérer une concurrence d'utilisateurs modeste, et j'ai exploré diverses options pour garder les données en synchronisation entre le serveur et client. Les données de l'application sont amorcées en JavaScript lors du chargement de la page, et les websockets sont utilisées pour transmettre les données au serveur. Pour un peu de contexte, j'utilise actuellement Node.JS et Socket.IO pour créer une passerelle client-serveur persistante, qui agit comme un proxy à un backend Django. Le problème est que je souhaite synchroniser tous les clients connectés afin que toute modification de l'application sur une session client soit immédiatement répercutée sur toutes les sessions clientes connectées. La difficulté est que tous les utilisateurs ne sont pas nécessairement autorisés à voir toutes les données; Il existe différents niveaux d'utilisateurs et différents utilisateurs peuvent s'approprier des ensembles de données légèrement différents.Utilisation d'AMQP et de Node.JS pour la synchronisation de données en temps réel

Par conséquent, lorsqu'un objet est modifié d'une manière ou d'une autre et que la modification est validée dans la base de données, j'ai besoin de savoir quels utilisateurs de ceux actuellement connectés je peux transférer en toute sécurité. J'ai essayé différentes solutions et j'ai l'impression que c'est quelque chose qui peut être géré par une file d'attente de messagerie pubsub - en utilisant quelque chose comme AMQP, mais j'ai du mal à comprendre la structure de l'application.

Dans ma tête, la structure d'application ressemble à ceci:

Client < ->Node.JS gateway < ->AMQP messaging queue < ->Django app

Devrais-je créer un seul échange direct, le traitement de la Node.js et instances Django en tant que clients uniques, puis filtrer à travers les résultats en quelque sorte dans Node.js?

Ou est-ce que ce type de filtrage peut être géré par le système de messagerie, chaque client connecté s'abonnant à un sujet pertinent, par exemple, et ne recevant que les données qu'il est autorisé à voir? J'ai très peu d'expérience de travail avec les systèmes de messagerie, donc j'ai du mal à comprendre de quel type de rôle ils sont capables dans une application. Tout avis serait grandement apprécié.

Répondre

0

Je pense qu'il sera beaucoup plus facile pour chaque client d'être abonné à la file d'attente pertinente et d'utiliser simplement le nœud comme une passerelle bête. Généralement, c'est une bonne idée de pousser la sécurité le long de la pile aussi loin que possible. Je pense aussi que cela rendra la manipulation plus facile si un client se déconnecte un peu, car vous pouvez laisser des choses dans leur file d'attente et les repousser plus tard.

+0

C'était mon instinct, mais j'ai du mal à comprendre comment AMQP peut filtrer les données. Je sais que je peux mettre en place un échange de sujets et publier les informations de cette façon, mais je ne suis pas sûr de savoir comment adapter cela au système d'autorisation granulaire qui enveloppe les données. –

+0

Je vais accepter cette réponse parce que le principe général est tout à fait juste; J'ai besoin de faire un peu plus de recherche sur mon cas d'utilisation spécifique, mais merci de m'avoir poussé sur la bonne voie. –

Questions connexes