XMPP: cómo solicitar servidor para el estado de presencia de los contactos de un usuario?

StackOverflow https://stackoverflow.com/questions/4029924

  •  26-09-2019
  •  | 
  •  

Pregunta

Tenemos un sitio y hemos desarrollado un sistema de chat para que el uso de strophe.js biblioteca y ejabberd servidor XMPP. Utilizamos apego sesión que se inició con PHP (usando una biblioteca en casa). Lo que hacemos es obtener el RID y el SID desde el script PHP, a continuación, utilizar el apego sesión de estrofa. El dijo RID y el SID se almacena en una cookie y el valor de RID en la cookie se actualiza cada actualización de la RID en strophe.js.

Esta bien las obras, después de entrar en que recibimos el estado de presencia de cada uno de nuestros contactos. El problema con esto es, cuando se va a otra página en el sitio, y adjuntar el uso de la citada RID (usamos el valor incrementado producido por estrofa) y el SID, el servidor no enviará la información de presencia de sus contactos más en comparación con cuando inició sesión. Esto hizo que nuestra área de contactos que aparezca todo invisible a pesar de que están en línea. Que sólo aparecerían en línea si usted (o su contacto) cierra la sesión en el chat, a continuación, conecte de nuevo (ya que recibirá una actualización de presencia desde el servidor XMPP).

He escrito una solución donde el estado de presencia de sus contactos se guarda en una cookie (todos los contactos en línea tendrá sus JIDs guardados en la cookie) cuando se recibe una presencia desde el servidor. Esto se comprueba cada carga de la página, si se establece la cookie, que será leído, y todas JIDs en la cookie será marcada como en línea. Esto está funcionando bien pero podría haber algunas formas mejores para resolver esto, el uso de comportamientos predeterminados de XMPP.

¿Fue útil?

Solución

servidores XMPP envían sondas de presencia a todos sus contactos en su nombre cuando usted envía su propia presencia inicial al servidor. A partir de entonces, sólo recibirá los cambios de estado de presencia de sus contactos.

Si pierde el estado de presencia de sus contactos, tendrá que enviar sus propias sondas de presencia para restablecer ese estado. Sin embargo, esto probablemente no es algo que desea hacer mucho, y que pasa alrededor del estado de presencia es probablemente preferido en la mayoría de los casos.

Usted podría tratar de pasar el estado a través de XMPP. Por ejemplo, se puede utilizar para el almacenamiento privado de XML (XEP-0049), PubSub (XEP-0060), o PEP (XEP-0163).

Otra opción en lugar de galletas para pasarlo lado del cliente es usar un objeto HTML 5 SharedWorker para mantener el estado.

Otros consejos

Me estremezco al pensar en las propiedades de escala asociados con el almacenamiento de toda la presencia que acaba de recibir de la parte posterior del servidor para el servidor de almacenamiento privado. almacenamiento privado casi siempre con el respaldo de almacenamiento a largo plazo en lugar de almacenarse en la memoria, por lo que vamos a moler el disco de su servidor para el polvo.

Si desea almacenar más el estado en el navegador, y aislar a sí mismo de la versión del navegador, y ya está usando jQuery, a continuación, jStore es bastante dulce.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top