web-dev-qa-db-fra.com

Comment les applications Meteor peuvent-elles fonctionner hors connexion?

Ceci est utile lorsque:

  • le serveur est en panne et le client ne peut pas se connecter pour une synchronisation en temps réel
  • il n'y a pas de connectivité Internet
  • l'utilisateur ne veut pas aller en ligne mais veut travailler avec une application;
50
Aleksey Kulikov

Oui! Ceci est déjà implémenté dans Meteor, pour la plupart.

Si la connexion au serveur est perdue, le client peut toujours fonctionner localement. Les écritures dans la base de données semblent réussir sur le client et se refléter instantanément à l'écran. Une fois la connexion rétablie, Meteor renverra toutes les demandes de méthode en attente au serveur et mettra à jour l'affichage du client avec les résultats du serveur. Tout cela est le résultat de la compensation de la latence, être hors ligne est traité comme un serveur très lent.

Les clients peuvent surveiller la sortie réactive 'Meteor.status ()' pour voir l'état de la connexion en cours. Par exemple, vous pouvez utiliser Meteor.status pour créer une fenêtre contextuelle avec un minuteur de reconnexion et un bouton "Se connecter maintenant", comme Gmail.

EDIT: bien sûr, Meteor n'est pas magique. Si vous appuyez sur 'recharger', ou si vous naviguez en dehors de la page, etc., alors que vous êtes hors ligne, vous perdrez votre session Meteor et vous ne pourrez plus recommencer tant que vous n'avez pas regagné le réseau. Ceci est vrai pour toutes les applications Web avec le mode hors connexion, donc, cela ne devrait pas surprendre les utilisateurs de votre application.

54
n1mmy

Deux autres options peuvent résoudre le problème «Si votre onglet ferme ou si vous rechargez». Je ne les ai pas encore essayées mais elles ont l'air intéressantes.

https://github.com/awwx/meteor-offline-data :

Meteor Offline Data

Accueil du projet de données hors ligne Meteor, implémentant une "collection. Offline" qui englobe une collection Meteor.Collection:

Les données du serveur sont stockées de manière permanente dans la base de données du navigateur, mise à disposition de l'application même si celle-ci démarre en mode hors connexion.

Les modifications apportées par l'utilisateur sont également enregistrées dans la base de données du navigateur, en les préservant si le navigateur est fermé et rouvert. La prochaine fois l'application est mise en ligne, les modifications sont envoyées au serveur.

Les mises à jour sont partagées de manière réactive entre les fenêtres de navigateur ouvertes sur le même fichier application, même en mode hors connexion.

et https://github.com/GroundMeteor/Meteor-GroundDB :

Caractéristiques:

Empreinte légère

Large support du navigateur Chrome, Safari, Firefox et Internet Explorer 9 Retour à la normale Meteor.Collection s'il n'y a pas de reprise de stockage local de changements dans les collections Résumé des méthodes Fonctionne en mode hors connexion cross cross Onglets de la fenêtre Prise en charge de SmartCollection Prise en charge de la connexion hors connexion Bases de données côté client uniquement Utilise EJSON.minify et EJSON.maxify pour compresser les données dans le stockage local A l'avenir, il y aura un gestionnaire de conflit personnalisable sur le serveur.

11
russellfeeed

Bas de la ligne:

1) Soit le navigateur peut enregistrer complètement la session réelle (chaque fois? Chaque fois que l'application le demande parce que des modifications ont été apportées. Pour une telle application, toutes les 10 secondes ne sont pas suffisantes, nous avons besoin de tous les événements). Pouvons-nous le programmer dans, disons Firefox? (Mais il faudrait tout sauvegarder (HTML, JS, MinoMongoDB, etc. juste pour un changement!)

2) Ou nous avons une pile de météores complète côté client prenant en charge les éléments locaux (une application locale), mais communiquant d'une manière ou d'une autre ses opérations CRUD à une autre application en ligne dans un autre onglet ou une autre instance du navigateur. (Cette 2ème application serait servie par le vrai serveur distant) Le problème est de savoir si ces 2 applications peuvent communiquer. Je suppose que les navigateurs l’interdiront pour des raisons de sécurité) 

Une autre idée plus créative pourrait être: Activer oplog sur la pile du client. Ensuite, chaque fois que vous êtes en ligne et constamment en ligne, l'oplog du client réel peut être exporté/importé dans l'application principale (qui est un autre journal oplog),

3) Sauf si nous pouvons envoyer une requête call () depuis la pile de météores complète du client vers une autre pile de météores sur le serveur. (Est-ce possible? Existe-t-il des règles concernant les limitations de domaine d'URL dans meteor)

Mais cela ne résout pas la possibilité d'avoir une pile de météores complète sur une tablette (je ne suis pas au courant, rien n'est possible)

0
EMHmark7