Связь между двумя процессами по героку (какой порт использовать) - PullRequest
5 голосов
/ 05 марта 2012

У меня есть такой Procfile:

web:     bundle exec rails server -p $PORT
em:      script/eventmachine

Процесс em запускает машину событий с start_server (порт ENV['PORT']), и мой веб-процесс иногда должен с ним связываться.

Мой вопрос: как веб-процесс узнает, через какой порт он будет взаимодействовать?Если я правильно понимаю heroku, он назначает случайный порт при запуске процесса (и может измениться, если ps убит или перезапущен).Спасибо!

Ответы [ 3 ]

3 голосов
/ 16 ноября 2013

Согласно документации Heroku,

Два процесса, выполняющие на одном и том же dyno , могут обмениваться данными по TCP / IP с использованием любых портов, которые они хотят.

Два процесса, работающие на разных dynos, вообще не могут обмениваться данными через TCP / IP. Они должны использовать memcached, или базу данных, или один из плагинов Heroku, чтобы общаться.

3 голосов
/ 05 марта 2012

Процессы изолированы и не могут напрямую взаимодействовать друг с другом.

http://www.12factor.net/processes

Однако есть несколько других способов.Одним из них является использование вспомогательного сервиса, такого как Redis или Postgres, в качестве посредника, а другого - использование FIFO для связи.

http://en.wikipedia.org/wiki/FIFO

Хорошо, что ваши процессыявляются изолированными и не имеют общего доступа, но для этого вам нужно немного изменить архитектуру приложения.

1 голос
/ 09 мая 2013

Я читаю это, пока еду на работу. Так что я ничего не пробовал с этим (извините), но это выглядит актуально и потенциально потрясающе.

https://blog.heroku.com/archives/2013/5/2/new_dyno_networking_model

...