5 votos

Cómo usar XMPP/Jabber, mientras que la conmutación entre redes?

Cuando se ejecuta un cliente Jabber lo que sucede (o lo que debería suceder) cuando las redes de conmutación (o cuando se pierde la conectividad y la red GSM/UMTS módem vuelve a conectar)?

Puede un móvil Android Jabber cliente (por ejemplo, Jabiru) ser inteligentes acerca de este tipo de situaciones?

Peor de los casos puedo imaginar: el Cliente no le importa, TCP (a través de TLS) la conexión al servidor Jabber se pierde, el Jabber estado (de forma remota) es falso y hay una ventana de tiempo donde los mensajes (de amigos) se pierden.

He observado un peor caso, por ejemplo, con un stock de Jabber cliente en un ordenador Portátil utilizando una fiable conexión UMTS.

Cuando se utiliza un ordenador Portátil fácilmente puedo proteger mi Jabber sesión como esta:

  • conectarse a través de autossh a un sistema con una conexión de red estable y ejecutar directamente screen -Rd
  • iniciar una consola de Jabber cliente en screen

Por lo tanto, cuando se pierde la conexión de internet móvil la conexión con el servidor Jabber es todavía bien. Y autossh vuelve a conectar automáticamente y re-conecta a la ejecución de la pantalla de sesión cuando un nuevo móvil de conexión.

Es una configuración similar a este es necesario cuando se utiliza Jabber en un dispositivo Android?

O hay protocolo Jabber extensiones para los clientes móviles que realmente ayuda a evitar la pérdida de mensajes, etc. en la red de encendido/apagado de la situación (mientras esté conectado a un servidor Jabber)?

6voto

Flow Puntos 14132

No se si esta pregunta es en el tema de los Entusiastas de Android. Pero yo trabajo con XMPP y Android, así que aquí está mi respuesta:

Como Mentira Ryan ya se dijo, una entrega de un móvil a otro es casi siempre transparente a la pila TCP en los dispositivos Android. Pero hay situaciones en que la dirección IP de su dispositivo Android va a cambiar. Esto son típicamente GSM/UMTS <-> WiFi interruptores, que hará que la conexión TCP a ser inutilizable por el cliente XMPP.

En Android el estándar XMPP biblioteca que la mayoría de los clientes de uso además de tener su propia propiedad de uno - es (a)Justo: los Clientes que utilizan (a)de Bruces con la configuración predeterminada no se observe una relación de cambio de una manera oportuna. Pero hay esperanza: XMPP Ping apoyo es Justo tronco y se entrega con la versión 3.3. La mayoría de los aSmack aplicaciones ya uso un aSmack versión que cuenta con el soporte para el mismo, y sólo necesita implementar de acuerdo a las medidas.

En el otro lado es el XMPP servidores de trabajo para establecer su presencia no está disponible (en línea) después de un (servidor definido) tiempo de espera para llegar al último cliente de la JID en cuestión.

Así que no es necesario construir soluciones, si usted está utilizando una adecuada XMPP cliente, pero puede que tenga que vivir con el fantasma de estado de las situaciones que debe resolver después de un par de minutos.

Hay un bonito XEP (XMPP Extensión), que sería la bala de plata para móviles XMPP Conexiones: XEP-0198 - Gestión del Flujo. Usted puede leer sobre él en Ge0rg del Blog.

Se está trabajado en (a)Tortazo. Pero va a tomar un tiempo hasta que sea estable y se necesita también el apoyo del servidor para XEP-0198.

1voto

Lie Ryan Puntos 15629

Yo no soy un experto en redes móviles, pero AFAIK la pila TCP debe manejar móviles entrega de manera transparente, los programas de aplicación que no debe de ser consciente de que el móvil de la capa de red son el cambio de torres de telefonía celular a la celda de la torre. A partir de la aplicación de la perspectiva del programa, sólo hay una conexión continua.

La única razón por la que puedo pensar acerca de lo que estamos viendo en el ordenador portátil de cliente jabber es que no hizo uso de keepalive cuando la apertura de una larga marcha de la conexión TCP. Cuando hay un largo período de no transmisión, una de las intermediario nodos en la red (normalmente el firewall) puede decidir terminar la conexión (por lo general para ahorrar recursos para atender otras conexiones activas) y el servidor por lo tanto no tienen la oportunidad de decirle al cliente para terminar limpiamente. No usar keepalive para una larga conexión hará que sea imposible para el cliente para detectar que la conexión ha sido interrumpida debido a que la única manera de que un cliente para detectar una interrupción en la conexión es si se trató de enviar un paquete y fracasado de forma permanente.

Keepalive hará que la pila TCP periódicamente ping al servidor con longitud cero paquetes ACK, por lo tanto intermediario nodos tendrá en cuenta su larga marcha de la conexión a estar todavía activo y no terminar.

PreguntAndroid.com

PreguntAndroid es una comunidad de usuarios de Android en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X