TCP Comunicación de socket entre procesos en el dinamómetro de trabajadores Heroku

Me gustaría saber cómo comunicar entre procesos en un banco de pruebas de Heroku.

Queremos que un trabajador de Resque lea una cola y envíe los datos a otro proceso que se ejecute en el mismo banco de pruebas. El "otro proceso" es un software estándar que generalmente usa sockets TCP (puerto xyz) para escuchar los comandos. Está configurado para ejecutarse como un proceso en segundo plano antes de que se inicie el trabajador Resque.

in embargo, cuando intentamos conectarnos localmente a ese socket TCP, no llegamos a ninguna parte.

Nuestra tarea Rake para configurar la cola hace esto:

task "resque:setup" do
  # First launch our listener process in the background
  `./some_process_that_listens_on_port_12345 &`

  # Now get our queue worker ready, set up Redis backing store
  port = 12345
  ENV['QUEUE'] = '*'  
  ENV['PORT'] = port.to_s
  Resque.redis = ENV['REDISTOGO_URL']

  # Start working from the queue
  WorkerClass.enqueue
end

Y eso funciona: nuestro proceso de escucha se ejecuta y Resque intenta procesar las tareas en cola. Sin embargo, los trabajos de Resque fallan porque no pueden conectarse alocalhost:12345 (específicamente,Errno::ECONNREFUSED).

Posiblemente, Heroku está bloqueando la comunicación de socket TCP en el mismo banco de pruebas. ¿Hay alguna forma de evitar esto

Traté de eliminar el "código" de la situación y simplemente lo ejecuté en la línea de comando (después de que el proceso del servidor afirme que está correctamente vinculado a 12345):

nc localhost 12345 -w 1 </dev/null

Pero esto tampoco se conecta.

Actualmente estamos investigando el cambio del código de cliente / servidor para usarUNIXSocket en ambos lados en lugar deTCPSocket, pero como es una pieza de software lista para usar, preferimos evitar nuestro propio tenedor si es posible.

Respuestas a la pregunta(10)

Su respuesta a la pregunta