PubNub ou Pusher et stocker des données sur mon propre serveur

J'ai une application mobile où les utilisateurs peuvent se parler les uns les autres via un chat (utilisateur à l'utilisateur seulement, pas la salle de discussion).

Aujourd'hui, tout est synchrone. Nous envisageons de changer la solution à quelque chose de plus "en temps réel", peut-être en utilisant PubNub ou Pusher.

Nous nous demandons la meilleure façon de le faire, étant donné que notre serveur devra stocker chaque message envoyé.

Ce que nous avons à l'esprit:

  • Chaque application mobile créerait une chaîne utilisant l'ID utilisateur comme nom de chaîne.
  • Cette chaîne serait utilisée pour la communication de l'application / serveur mobile.

Mon problème concerne le serveur, aujourd'hui, nous avons un backend Nginx / PHP. Nous aimerions que notre serveur puisse écouter tous les canaux utilisateurs car nous devons stocker les messages envoyés par les utilisateurs sur notre propre serveur.

Pour la communication utilisateur à l'utilisateur, nous pensons créer notre propre protocole dans les messages. Par exemple. Si l'utilisateur 111 veut envoyer "bonjour" à l'utilisateur 222, il pourrait publier "à: 222 bonjour", qui serait récupéré par le serveur.

Le serveur, après avoir reçu cette commande, pousserait "from: 111 hello" vers son propre canal (ce qui serait 222).

Le problème que je vois avec cette conception est que notre serveur devrait ouvrir autant de canaux que nous avons des utilisateurs dans notre base de données.

Je ne vois pas une meilleure façon de le faire.

2 Solutions collect form web for “PubNub ou Pusher et stocker des données sur mon propre serveur”

Comme suggestion sur la façon de le faire, essayez la prochaine chose:

  1. Abonnez-vous des clients sur leurs propres chaînes
  2. Abonnez-vous sur un canal spécial avec un nom constant
  3. Si le client A veut envoyer un message au client B, il doit l'envoyer dans le canal auquel le serveur a déjà été abonné. Peut-être devrez-vous l'envoyer en format spécial, ce qui permettra d'identifier l'expéditeur et le destinataire.
  4. Le serveur a analysé le message formaté du client A et l'envoyez dans le canal auquel le sous-canal B a été abonné.

Donc, fondamentalement, le serveur est abonné uniquement sur une chaîne et en recevez des messages, analysez et envoyez dans le canal du destinataire (vous ne devez pas vous inscrire sur le canal dans lequel vous souhaitez envoyer un message).

PubNub Chat avec l'historique des messages

Bonne nouvelle: vous pouvez facilement écrire une application de chat avec de nombreux canaux différents affectés à chaque utilisateur et enregistrer l'historique des messages à l'aide du réseau en temps réel de PubNub – High Availability Global Distributed – Storage Service . Avec ce service, vous pouvez charger de façon sélective les messages directement sur le Mobile / Web Client Device depuis le Centre de données le plus proche pour l'historique des messages passés, mais vous pouvez également charger les messages dans votre propre serveur à l'aide de l'API Retraitement du stockage. Voyons comment cela fonctionne avec l'application de discussion suivante:

Chat avec historique code source JavaScript

Abonnez-vous à votre USER_ID canal USER_ID afin de recevoir des messages d'autres utilisateurs. Chargez également l'historique des conversations précédentes.

 <script src="https://cdn.pubnub.com/pubnub.min.js"></script> <script>(function(){ // INIT var channel = 'USER_ID-123456'; var pubnub = PUBNUB.init({ subscribe_key : 'demo', publish_key : 'demo' }); // CHAT MESSAGE RECEIVER function chat(message) { // process chat message here... } // LOAD HISTORICAL MESSAGES pubnub.history({ channel : channel, // USER_ID Channel limit : 50, // Load Last 50 Messages callback : function(msgs) { pubnub.each( msgs[0], chat ) } }); // PUBNUB REAL-TIME NETWORK HA-TCP STREAM CONNECTION // FOR RECEIVING INCOMING CHAT MESSAGES pubnub.subscribe({ channel : channel, // USER_ID Channel connect : connect, // Connected - Ready to Receive Messages callback : chat // Callback Processor }); })();</script> 

Ce sont les bases de l'application de discussion sur l'application mobile / client Web. Maintenant, vous pouvez facilement charger / enregistrer des messages vers / depuis un fournisseur global. Ensuite, vous voudrez charger ces messages sur votre serveur à partir de PHP à l'aide de l'interface PubNub REST.

Chargement du message stocké via REST API sur PHP Backend

Vous utiliserez l'interface REST pour collecter les messages postés précédemment si nécessaire auprès de votre serveur PHP Backend. Vous n'avez peut-être pas besoin de cette étape car les données sont stockées sur le réseau global en temps réel de PubNub où vos messages sont reproduits dans de nombreuses régions géographiques pour la fiabilité et les performances élevées en lecture / écriture.

PubNub Storage / History V2 REST API Doc – https://gist.github.com/stephenlb/d53f4cc3a891c03b478e

Demande REST

http://pubsub.pubnub.com/v2/history/sub-key/demo/channel/my_channel?count=5

Réponse REST

[["Pub1", "Pub2", "Pub3", "Pub4", "Pub5"], 13406746729185766,13406746845892666]

Vous pouvez également utiliser le SDK de PubNub PHP pour aider à certaines des complexités. Vous pouvez trouver le SDK de PubNub PHP ici: https://github.com/pubnub/php et charger l'historique avec cet exemple:

 <?php $pubnub = new Pubnub( "demo", ## PUBLISH_KEY "demo", ## SUBSCRIBE_KEY "", ## SECRET_KEY false ## SSL_ON? ); $history_data = $pubnub->history(array( 'channel' => $channel, 'count' => 100, 'end' => "13466530169226760" )); ?> 

Plus de détails sur Storage REST API sur PubNub

Suivez ce lien pour continuer en profondeur avec PubNub Storage API: https://gist.github.com/stephenlb/d53f4cc3a891c03b478e – Ce guide vous aidera à répondre à des détails supplémentaires concernant l'API REST de stockage.

Plus d'un client de conversation GUI complet utilisant l'historique

Voici un groupe-chat qui vous aidera à démarrer, il est écrit en utilisant Bootstrap CSS Framework – https://github.com/pubnub/real-time-stocks/#simple-embedded-chat-application

JavaScript rend le site Web intelligent, beauté et facile à utiliser.