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

Bri*_*ong 5 port process heroku eventmachine

我有这样的Procfile:

web:     bundle exec rails server -p $PORT
em:      script/eventmachine
Run Code Online (Sandbox Code Playgroud)

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

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

Chr*_*nix 5

根据 Heroku 文档,

运行在同一个 dyno 上的两个进程可以使用他们想要的任何端口通过 TCP/IP 进行通信。

运行在不同dynos上的两个进程根本无法通过 TCP/IP 进行通信。他们需要使用 memcached、数据库或 Heroku 插件之一进行通信。

  • 此文档的当前版本是 [here](https://devcenter.heroku.com/articles/dynos#networking) (2认同)

Nei*_*ton 3

进程之间是隔离的,不能直接相互通信。

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

然而,还有一些其他方法。一种是使用 Redis 或 Postgres 等支持服务作为中介,另一种是使用 FIFO 进行通信。

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

您的进程是隔离的并且不共享任何内容,这是一件好事,但是您确实需要稍微不同地构建应用程序以适应这一点。

  • 是的,我可以在 redis 中做一个 fifo 队列或其他东西,但你确定这是关于进程无法相互通信的吗?Eventmachine 服务器/客户端可以通过标准 tcpip 相互通信,就像 Web 进程接受传入的 tcpip 请求一样。我只是不知道要连接哪个端口。不过还是谢谢你的回答 - Adam Wiggins 的 12factor 页面真的很有趣。 (2认同)