En temps réel des applications web avec mongodb et nodejs
J'ai pensé à la façon de faire en temps réel de l'application web à l'aide de nodejs/socket.io/mongodb. L'idée est assez similaire à google docs, où les objets édités sur une page sont émis et réaffichées sur tous les navigateurs clients.
Quelle est la meilleure façon de faire cela? De ce que j'ai lu, je pense, de 3 façons:
1) à l'Aide de mongodb oplogs
Ajouter un "auditeur" à mongodb collections, rerender parties de la page à chaque fois que des modifications sont apportées à la collecte (inconvénients: lent?)
2) à l'Aide de local json
Récupérer mongodb données en json fichier, utilisez la fs pour le modifier, l'enregistrer sur mongodb et supprimer json fois terminé (le contre: encombrant d'avoir couche supplémentaire entre la base de données et l'application réelle)
3) à l'Aide purement socket.io
Rerender sans stocker, enregistrer seulement après que toutes les modifications ont été apportées (cons: les fichiers sont probablement pas rendus correctement dans tous les navigateurs)
Est-il un meilleur moyen pour y parvenir? (Comment est-ce que google docs travail de toute façon?) Serait vraiment reconnaissant de toute aide n'importe qui peut offrir!
OriginalL'auteur Poh Zi How | 2016-12-29
Vous devez vous connecter pour publier un commentaire.
Nous avons construit en temps réel de l'app de l'année dernière, essentiellement un outil pour les auteurs de travailler sur la même page où ils pourraient ajouter/supprimer/modifier les éléments (textes, images, vidéos, etc.)
Ce que nous avons utilisés ont été:
Et honnêtement, c'est assez impressionnant comment il est rapide.
J'aime hapi en raison de sa modularité. Il s'agit essentiellement d'Exprimer plus modulaire. Vous pouvez utiliser soit, il n'a pas vraiment d'importance. Il y a une très bonne explication sur les différences clés: stackoverflow.com/questions/30469767/...
Viens de tomber sur ce post et j'ai voulu essayer RethinkDB . Malheureusement, le dernier git les mises à jour dont fait près d'un an. Cela a permis de se demander s'il est encore développé
href="https://www.rethinkdb.com/blog/2.3.6-release/" >rethinkdb.com/blog/2.3.6-release Ils ont eu des moments difficiles à un certain point, parce que la société ne gagnais pas assez d'argent, mais ils gère très bien, et il reste en open-source et maintenu. Vous pouvez en savoir plus en suivant le lien.
si je veux ajouter Redis à ce mélange, quel serait-il? parce que je vois beaucoup parler quand il s'agit de web en Temps Réel d'applications!!
OriginalL'auteur Vadorequest
C'est facile à résoudre sans trop de complication et de l'enregistrement des documents, des bases de données. Vous ne devez enregistrer le document endroits. Nœud a quelques très impressionnant de fonctionnalités pour ce genre d'applications. Je vous recommande de regarder dans ces sujets:
EventEmitters
Flux
Nœud du système de fichiers a des classes que vous pouvez utiliser pour construire ce pour les documents:
fs.FSWatcher
fs.ReadStream
fs.WriteStream
Vous pouvez utiliser socket.io pour raccorder ces événements de votre application cliente.
OriginalL'auteur Sulejman Sarajlija
Je voudrais aller avec l'option 1 & 3 mais avec une légère différence.
1. La première option à la queue mongoDB opLog est un bon un, mais la surcharge devient très gros sur la DB où votre application sera fait des millions de transactions. Le meteorJS bibliothèque est déjà à le faire et vous pouvez les découvrir car ils sont mature et stable à l'usage que l'écriture de nos propres services.
OriginalL'auteur Bala Abhinav
Si je devais le faire, je serais probablement utiliser un mélange. Redis ou rabbitmq pour gérer le support.io de la liste de connexion pour obtenir les publier et s'abonner comportement aussi rapide que possible, avec un minuteur que, périodiquement, des bouffées de l'écrit, à propos du document de mongodb à long terme, la persistance, bien que sans doute, vous pouvez laisser tous les docs dans le Redis, si vous vouliez.
OriginalL'auteur Paul
"La construction d'un document collaboratif de l'application d'édition" est en fait un chapitre dans le livre "la maîtrise de la Node.js". Ils utilisent:
ShareDB est en temps réel principale base de données basée sur la Transformation Opérationnelle (OT) de documents JSON. C'est le temps réel backend pour la DerbyJS cadre d'application de web. https://github.com/share/sharedb
Vagues sont hébergés, les documents structurés qui permettent transparente et une faible latence, les modifications concurrentes. Pour fournir cette expérience live, Google Wave utilise la Transformation Opérationnelle (OT) cadre de contrôle de la simultanéité. https://svn.apache.org/repos/asf/incubator/wave/whitepapers/operational-transform/operational-transform.html
Quill est un moderne de l'éditeur WYSIWYG intégré pour la compatibilité et de l'extensibilité. https://github.com/quilljs/quill
WebSocket et websocket-json-stream
Dépôt GitHub le code source complet: https://github.com/PacktPublishing/Mastering-Node.js-Second-Edition/tree/master/Chapter06/sharedb
Aussi, MongoDB a récemment publié un livre blanc sur le flux de données avec Apache Kafka pour atteindre la capacité en temps réel: https://webassets.mongodb.com/kafka_and_mongodb.pdf
OriginalL'auteur Jan
Je pense que la synchronisation des données à l'aide de socketIO est le meilleur moyen ...
Envoyer des données à mongo avec un émettent.
Écouter pour que les modifications dans la base de données à l'aide de la douille et de rerender votre page avec ces changements.
Vous pouvez également visiter nodejs en temps réel mongodb! pour voir comment synchroniser automatiquement les données avec regina.
OriginalL'auteur tutanck