Android transmitiendo más de 3g
tcp udp (1)
Estoy en las primeras etapas de escribir una aplicación que necesitará transmitir datos a varios otros dispositivos.
Lo primero que pensé fue utilizar una transmisión UDP, sin embargo, según http://code.google.com/p/boxeeremote/wiki/AndroidUDP y Android 3G UDP Broadcast , el UDP no podrá pasar a través de NAT cuando esté en el móvil. red (que es esencial para mi aplicación).
Sé que podría usar un servidor para transmitir, pero preferiría evitar generar mucho tráfico en mi servidor doméstico.
La última alternativa que puedo pensar es tener varias conexiones tcp / ip y recorrer todos los clientes conectados y enviar la transmisión. Pero dado que cuento con al menos 30 oyentes, creo que será caro.
Aún no tengo ningún código de transmisión asociado, es por eso que no publiqué ninguno;)
¿Hay alguna manera de romper con el NAT? ¿El teléfono podrá manejar 30 conexiones simultáneas de tcp / ip? ¿O debería buscar otro método de transmisión?
¡Cualquier pista sería muy apreciada!
Saludos cordiales Johan Risch
:::::::::::::::::::::::::ADICIONAL:::::::::::::::::::::::: :::::::: Enviaré cadenas de longitud de 10-20 caracteres una vez cada 30-360 segundos (será controlable por el usuario) que contengan puntos geográficos en formato de cadena. El orden en que se enviarán los datos no es importante, es por eso que pensé primero en udp.
Configuré mi servidor para que cuando un usuario inicie sesión, actualice mi base de datos con su IP actual.
Preferiblemente me gustaría que funcione globalmente, pero siempre y cuando funcione dentro de las redes móviles en el mismo país.
Esa es toda la información relevante que se me ocurre, ¡espero que esto aclare algunas cosas! :::::::::::::::::::::::::/ADICIONAL::::::::::::::::::::::: ::::::::::
El NAT no pasa el UDP porque UDP no tiene una dirección de destino, por lo que técnicamente el UDP debe enviarse a todas las subredes de la red. Cuando la red es la LAN de su hogar, no es gran cosa, pero cuando la red es su ISP o la red troncal de la universidad o proveedor de servicios celulares, el UDP podría replicarse en cientos de miles de subredes. Esa es una tormenta de paquetes que degradará el rendimiento de la red para todos, y es una sobrecarga enorme para su aplicación en particular, ya que solo quiere hablar con un pequeño número de clientes.
Este problema ya ha sido resuelto muchas veces. Los clientes de mensajería instantánea tienen una situación similar a la suya: desea enviar mensajes P2P directos cuando sea posible, a través de firewalls. ¿Cómo lo hicieron? La solución original transversal transversal de NAT / firewall era configurar un servidor de retransmisión de mensajes. Todos los clientes hablan con el servidor y el servidor emite mensajes de un cliente a los demás según corresponda. Funciona con NAT y firewalls porque el cliente inicia la conexión de salida al servidor.
Si los clientes pueden establecer una conexión entre pares, entonces el servidor de retransmisión puede simplemente dar a los clientes las direcciones IP de los demás y dejar de retransmitir mensajes.
UPNP es un protocolo que permite a los clientes solicitar un firewall para abrir un puerto para el tráfico entrante. Los clientes de BitTorrent usan UPNP para permitir a los clientes conectarse a P2P para compartir archivos. Los clientes se encuentran a través del servidor de torrents. La mayoría de los enrutadores de cortafuegos de LAN doméstica ahora son compatibles con UPNP, pero me parece dudoso que un proveedor de red celular ofrezca soporte de UPNP para las conexiones aéreas.
Otra posibilidad (remota) es la multidifusión TCP / IP, pero, como recuerdo, esto está realmente optimizado para el contenido "push" que fluye del servidor a los clientes en lugar del cliente de origen a igual.
Su mejor opción es echar un vistazo a los clientes de mensajería instantánea de código abierto, especialmente los que tienen implementaciones de Android, y ver cómo están haciendo IM. Jabber es uno que viene a la mente, estoy seguro de que hay otros. Incluso podría usar la API de mensajería de un sistema de mensajería instantánea como su capa de transporte de datos y, más o menos, mantenerse al margen de los detalles del nivel de cable por completo.