2017-08-21 1 views
1

Je crée une application de chat avec Socket.IO de Node.JS et il y a quelques choses sur lesquelles j'ai besoin de clarification.Application de chat mobile sur Google App Engine et Socket.IO

J'implémente la messagerie hors ligne dans mon application, ce qui signifie que lorsqu'un utilisateur ouvre l'application, il reçoit tous les messages qu'il a manqués lorsqu'ils étaient en ligne.

Ceci est mon approche:

1) Le client ouvre l'application et est abonnée/rejoint une salle 2) Le client envoie un message à Socket.IO 3) Socket.IO insère le message dans une sorte of database/datastore 4) Lorsque le client tente de récupérer les messages, il est extrait de la base de données/banque de données et enregistré sur le téléphone de l'utilisateur, puis supprimé de la base de données.

Est-ce une approche correcte? Je regardais en ligne et certaines personnes ont suggéré d'utiliser des files d'attente de tâches/messages comme la file d'attente des tâches de Google App Engine, mais je ne suis pas sûr de savoir comment cela fonctionne.

Répondre

1

Votre approche semble correcte, mais je ne supprimerais pas les messages d'une base de données, du moins pas immédiatement après leur réception par le client.

De votre question, il semble que vous ne sauvegardiez pas actuellement les messages dans une base de données. Cette approche a quelques inconvénients; par exemple, l'utilisateur ne peut pas afficher son historique de conversation sur un appareil qui n'était pas connecté lorsque certains messages ont été envoyés.

Il y a 2 façons que je peux penser à le faire d'une manière plus élégante:

  1. Enregistrer tous les messages à DB. sur la connexion websocket et les reconnexions, récupérez tous les messages plus récents que votre dernier message (Cette approche n'implique aucune fonctionnalité d'édition dans votre discussion, car les modifications ne seront pas récupérées de cette façon). Ce dernier peut être mis en œuvre en utilisant soit HTTP ou WebSockets.
  2. Si vous ne souhaitez pas stocker les messages sur votre serveur, vous devez implémenter une sorte de cache persistant dans l'appareil utilisé pour envoyer les messages. Ceci est très similaire à votre solution d'origine, sauf qu'au lieu de stocker les messages dans une base de données, vous les stockez sur l'appareil de l'utilisateur. cela nécessite une certaine logique pour détecter quand les messages sont reçus, et quand le destinataire se reconnecte, afin de déclencher l'envoi des messages manquants.

La première approche est beaucoup mieux pour le cas d'utilisation générale à mon avis, mais cela dépend de votre cas d'utilisation.

+0

Pourquoi ne pas supprimer les messages de ma base de données? @nadavvadan –

+0

Parce que vous ne sauvegardez pas l'historique de discussion de l'utilisateur. Cela dépend de votre cas d'utilisation, mais j'imagine que vous voudriez enregistrer l'historique du chat dans une base de données, de sorte que l'information puisse être accessible par d'autres périphériques/depuis le même périphérique après la suppression des données par l'utilisateur. Encore une fois, ne convient pas à toutes les applications, donc je suis en train de répondre à ce qui me frappe comme le cas d'utilisation le plus commun. – nadavvadan

+0

Et les files d'attente de messages peuvent remplacer la base de données dans ce contexte. Par exemple puis-je utiliser RabbitMQ au lieu de stocker les messages dans une base de données? –