www tutorial react pricing new framework addlistener parse.com push-notification chat real-time pubnub

parse.com - tutorial - Aplicación de chat Pubnub con almacenamiento



pubnub sdk (1)

Estoy buscando desarrollar una aplicación de chat con Pubnub donde quiera asegurarme de que todos los mensajes de chat que se envían se hayan almacenado en la base de datos y también que deseen enviar mensajes en el chat.

Descubrí que puedo usar Parse con pubnub para proporcionar opciones de almacenamiento, pero no estoy seguro de cómo configurar esos dos de forma tal que los mensajes y las imágenes que se envían en el chat se almacenen en la base de datos.

¿Alguien ha hecho esto antes con pubnub y parse? ¿Hay alguna otra opción disponible para usar con pubnub en lugar de usar el análisis sintáctico?


Sutha,

Lo que está buscando no es una solución trivial a menos que esté hablando de un número limitado de usuarios finales. Entonces no diría que no hay soluciones "fáciles", pero hay soluciones.

La razón es que su servidor debería escuchar (suscribirse) a cada canal de chat que esté activo y almacenar los mensajes que se envían a su base de datos. Imagine que su aplicación aumenta a 1 millón de usuarios (ni siquiera tiene que ser tan grande, pero ese número debería ayudarlo a darse cuenta de cómo puede ser difícil escalar cuando varias instancias de servidor escuchan canales de una manera no superpuesta o con superposición pero usando una implementación de cola de servidor y mensajes de eliminación de duplicidad).

Dicho esto, sí, hay clientes de PubNub que han implementado una solución de este tipo: Parse no es la clave para que esto suceda, por cierto.

Tienes tres opciones básicas para implementar esto:

  1. Implemente una solución que permita que muchas instancias de su servidor se suscriban a todos los canales a medida que se activan y almacena los mensajes a medida que ingresan. Hay muchos detalles para hacer que esto suceda, de modo que si no está preparado para esto, entonces esto no es probable donde quieres ir.

  2. Existe una forma de controlar todos los canales que se activan o inactivan con los webhooks de PubNub Presence (habilite Presencia en sus claves). Debería usar esto para mantener una lista de todos los canales que su servidor usaría para extraer el historial (habilitar Almacenamiento y Reproducción en sus claves) a pedido (no completamente en tiempo real).

Para cada canal que esté activo o inactivo, su servidor recibirá estos eventos a través de la llamada REST (y punto final que implemente en su servidor - su servidor Parse en este caso):

  • canal activo: graba "start chat" timetoken en tu Parse db
  • canal inactivo: grabar "final chat" timetoken en su Parse db
  • el evento inactivo es el inicio de un proceso que utiliza marcadores de hora de inicio / final que grabaste para que ese canal obtenga el historial de un canal de PubNub: pubnub.history({channel: channelName, start:startTT, end:endTT})
  • Tendrá que repetir esta llamada de historial hasta que reciba <100 mensajes (100 es la cantidad máxima de mensajes que puede recuperar a la vez)
  • mientras recupera estos mensajes, los guardará en su Parse db

Se han agregado nuevos Webhooks de presencia: ahora tenemos webhooks para todos los eventos de presencia: join, leave, timeout, state-change .

  1. Finalmente, puede guardar cada mensaje en Parse db en caso de éxito de cada llamada a pubnub.publish. No soy un experto en Parse y apenas conozco todas sus capacidades, pero creo que tienen algún tipo o tienda local, luego sincronización con la opción db en la nube (como StackMob cuando ese era un producto), pero incluso si no, guardarás msg en Parse nube db directamente.

El código se vería así (no completo, probables errores, resuélvalo o solicite soporte de PubNub para más detalles) en su cliente de JavaScript (en el navegador).

var pubnub = PUBNUB({ publish_key : your_pub_key, subscribe_key : your_sub_key }); var msg = ... // get the message form your UI text box or whatever pubnub.publish({ // this is some variable you set up when you enter a chat room channel: chat_channel, message: msg callback: function(event){ // DISCLAIMER: code pulled from [Parse example][4] // but there are some object creation details // left out here and msg object is not // fully fleshed out in this sample code var ChatMessage = Parse.Object.extend("ChatMessage"); var chatMsg = new ChatMessage(); chatMsg.set("message", msg); chatMsg.set("user", uuid); chatMsg.set("channel", chat_channel); chatMsg.set("timetoken", event[2]); // this ChatMessage object can be // whatever you want it to be chatMsg.save(); } error: function (error) { // Handle error here, like retry until success, for example console.log(JSON.stringify(error)); } });

Incluso puede almacenar todo el conjunto de publicaciones (en ambos extremos de la conversación) en función del intervalo de tiempo, el número de publicaciones o el tamaño del total de datos, pero tenga cuidado porque cualquiera de los usuarios puede salir del chat y el navegador sin previo aviso y fallará. ahorrar. Entonces, la publicación por publicación es probablemente la mejor práctica si es un poco ruidoso.

Espero que encuentres una de estas técnicas como un medio para comenzar en la dirección correcta. Hay detalles omitidos, así que espero que tengas preguntas de seguimiento.

Solo algunos otros enlaces que pueden ser útiles:

Y también tenemos un SDK de PubNub Parse . :)