我有一个像这样的Procfile:
web: bundle exec rails server -p $PORT
em: script/eventmachine
em
进程使用start_server
(端口ENV['PORT']
)触发事件处理器,我的网络进程偶尔需要与之通信。
我的问题是网络流程如何知道与之通信的端口?如果我正确理解了heroku,它会在进程启动时为您分配一个随机端口(如果ps被终止或重新启动,它可以更改)。谢谢!
答案 0 :(得分:3)
流程是孤立的,无法直接相互沟通。
http://www.12factor.net/processes
然而,还有其他一些方法。一种是使用Redis或Postgres等支持服务作为中介 - 另一种是使用FIFO进行通信。
http://en.wikipedia.org/wiki/FIFO
您的流程是孤立的,无共享,这是一件好事,但您需要对应用程序进行略微不同的构建以适应这种情况。
答案 1 :(得分:3)
根据Heroku文档,
在同一个dyno 上运行的两个进程可以使用他们想要的任何端口通过TCP / IP进行通信。
在不同 dynos上运行的两个进程根本无法通过TCP / IP进行通信。他们需要使用memcached或数据库或其中一个Heroku插件进行通信。
答案 2 :(得分:1)
我正在上班途中读这篇文章。所以我没有尝试过任何事情(对不起),但这看起来很相关,可能很棒。
https://blog.heroku.com/archives/2013/5/2/new_dyno_networking_model