iphone - WebSockets a través de una conexión 3G
node.js socket.io (4)
Como dice Willy Tarreau, se trata de proxies transparentes rotos utilizados por los operadores móviles. Estoy seguro de que tampoco es exclusivo para ellos (firewalls corporativos de empresas, por ejemplo). Puede evitar esto utilizando un número de puerto diferente (al menos en los operadores móviles). Algo más que el puerto 80. Usar SSL también podría funcionar, pero aún no lo he probado.
Entonces se encontrará con problemas con la gente detrás de los firewalls que bloquean todo fuera de los puertos 80 y 443.
Escriba su aplicación websockets para alternar entre el puerto 80 y algún otro puerto en cada intento de conexión, y haga que su host escuche en esos dos puertos. Entonces tienes una buena oportunidad de conectarte al servidor. Utilice el puerto de iptables REDIRECT si usa Linux para escuchar dos puertos simultáneamente.
He estado jugando con Socket.io, node.js y WebSockets, y todos funcionan bien con una conexión wifi.
Sin embargo, cuando pruebo una aplicación habilitada para WebSocket a través de una conexión 3G (en mi iPhone, por ejemplo), parece que la única solución factible es retroceder a largas encuestas.
Con Socket.io, la conexión falla con "Conexión WebSocket no válida o Origen no verificado" antes de volver a realizar un sondeo largo.
No sé si WebSockets está diseñado para funcionar a través de 3G. ¿Alguien ha tenido éxito al hacer que funcione así? Intenté varios métodos diferentes y todos parecen fallar, lo que me hace pensar que estoy intentando lo imposible.
Puede usar el protocolo de eventos enviados por el servidor en lugar de WebSockets.
SSE es más simple, compatible con HTTP y puede usar proxies.
Tenía estos mismos errores con una mala conexión de socket web en ciertas redes móviles. Resuelto por;
Puertos en movimiento: pasar por el servidor y el cliente para conectarse al puerto SSL (puerto 443)
Ping keep-alive: envía mensajes "ping" periódicos del cliente al servidor cada X segundos, y espera que regrese un "pong" del servidor. Si el servidor no devuelve "pong" en Y segundos, reinicie la conexión en el cliente.
La implementación (1) te llevará la mayor parte del camino hasta allí.
Algunos operadores de teléfonos móviles son notoriamente conocidos por configurar proxys transparentes completamente rotos que se ven obligados a pasar. Esta es una verdadera molestia que el grupo de trabajo WebSocket ha tenido que enfrentar desde el principio. El protocolo está diseñado para garantizar que fallará muy rápidamente en presencia de dichos productos, de modo que su aplicación pueda recurrir inmediatamente a otros métodos. Si descubre que lleva mucho tiempo detectar la anomalía y retroceder, informe al grupo de trabajo de Hybi en el IETF para que se pueda diagnosticar y solucionar el problema.
Paralelamente, puede ponerse en contacto con su operador de telefonía móvil y preguntarle cómo puede acceder a la red sin pasar por sus proxies transparentes rotos o al menos saber cuándo esperan que sus proxies rotos estén arreglados para soportar HTTP de acuerdo con las especificaciones. Algunos de ellos pueden ofrecerle múltiples opciones de acceso.