¿Heroku, matraz, y sockets de python?

Tengo una secuencia de comandos de Python que se ejecuta en mi computadora. Abre un zócalo e imprime todo lo que recibe. Esto definitivamente funciona: me las arreglé para conectarme desde otras computadoras y enviarle datos.

El problema es que mi aplicación heroku no puede conectarse al socket.

s = socket.socket(socket.AF_INET, socket.SOCK_STREAM) s.connect((daemon_socket_vars['host'], daemon_socket_vars['port'])) s.send("Hi!") s.close() 

La aplicación heroku falla en la segunda línea después de un tiempo de espera. Cuando ejecuto algo idéntico en mi computadora portátil o en la computadora portátil de un amigo (mientras que el script de Python que actúa como servidor se ejecuta en mi computadora portátil en ambos casos) funciona. ¿Alguien sabe por qué heroku tendría problemas con esto? ¡Gracias!

Cuando se ejecuta en Heroku, su servidor debe enlazarse al puerto especificado en la variable de entorno PORT (digamos 7880, solo por el bien de esta discusión). No se garantiza que sea 80, 5000, 8000, 8080 o cualquier otra cosa.

Para el mundo exterior, sin embargo, esto aparecerá como puerto 80 o puerto 443. Es decir, si se conecta desde fuera de Heroku, su cliente se conectará al puerto 80.

Una advertencia final: cuando se conecte desde fuera de Heroku, su cliente irá a través de la “Malla de enrutamiento de Heroku”, que entre otras cosas hace el 80 -> algo port “traducción”. El problema es que la malla de enrutamiento es una malla de enrutamiento HTTP: solo aceptará las solicitudes HTTP entrantes y las enrutará (después de modificarlas a veces, como agregar encabezados, etc.) a su dinamómetro.

Por lo tanto, no puede simplemente escribir una aplicación de sockets planos en Heroku y conectarse a ella directamente, tendrá que usar HTTP como su transporte.