在heroku上的两个进程之间进行通信(使用哪个端口)

时间:2012-03-05 05:48:21

标签: process heroku port eventmachine

我有一个像这样的Procfile:

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

em进程使用start_server(端口ENV['PORT'])触发事件处理器,我的网络进程偶尔需要与之通信。

我的问题是网络流程如何知道与之通信的端口?如果我正确理解了heroku,它会在进程启动时为您分配一个随机端口(如果ps被终止或重新启动,它可以更改)。谢谢!

3 个答案:

答案 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