La aplicación XMPP necesita filtrar otros clientes, por ejemplo, Pidgin

Desarrollamos una aplicación que supuestamente permitiría la interacción entre pares usando solo la aplicación. Nos gustaría diferenciar entre los usuarios que inician sesión a través de nuestra aplicación y en el cliente de chat común, por ejemplo, Pidgin.

Hay una observación: si tenemos el mismo nombre de usuario conectado a través de nuestra aplicación y Pidgin, la aplicación pierde estrofas de vez en cuando, porque solo entregaron a Pidgin y viceversa.

Ya comencé a considerar rastrear algún jid específico para el usuario de nuestra aplicación al verificar el sufijo específico de la aplicación, por ejemplo, MiNombre@NuestroServidor/NuestraAplicación (NuestraAplicación es ese sufijo). Pero si el mismo nombre de usuario inició sesión tanto en nuestra aplicación como en Pidgin, ¿cómo podemos hacer que el servidor entregue estrofas solo a nuestro cliente?

preguntado el 03 de mayo de 12 a las 18:05

3 Respuestas

El identificador de recursos (lo que usted llama el 'posfijo') no es una forma confiable de detectar su aplicación. El servidor puede cambiarlo a cualquier cosa que se le antoje. Además, aunque es poco probable en la práctica, el usuario puede ingresar esta cadena de recursos en su cliente, causando problemas.

La forma correcta de identificar el tipo de cliente es a través de su presencia. La forma estándar es usar XEP-0115: capacidades de la entidad y XEP-0030: Descubrimiento de servicio. Su cliente incluiría una característica de identificación particular en su resultado de descubrimiento de servicios.

Una vez que se identifique el JID completo de su cliente, utilícelo siempre para comunicarse con él. Utilizar cualquiera <iq> estrofas para solicitud/respuesta, o <message> estrofas con una carga útil personalizada (sin <body>).

contestado el 03 de mayo de 12 a las 23:05

Asegúrese de enviar al JID completo, no solo al JID base.

Full JID: MyName@OurServer/OurApp
Base JID: MyName@OurServer

La segunda versión puede tener un par de resultados diferentes, según el servidor y su configuración. El uso del JID completo enviará solo a esa conexión de cliente.

contestado el 03 de mayo de 12 a las 19:05

El "postfijo" se llama recurso en XMPP. Puede enviar paquetes XMPP a un JID simple (usuario@domian.com) o a un JID completo (usuario@dominio.com/recurso). Puede usar fácilmente el recurso para identificar a su cliente y también puede verificar el software del cliente con Service Discovery, consulte ejemplo 8.

contestado el 03 de mayo de 12 a las 22:05

Gracias, eso funciona. Tuvimos el problema de no agregar siempre un recurso al campo "para". Manejado al hacer cumplir la regla, no se envía ninguna estrofa sin el recurso adjunto. - Alejandro V

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.