2012-03-05 18 views
5

我有一個Procfile像這樣:在Heroku上兩個進程之間的通信(使用什麼端口)

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

em過程中觸發了一個EventMachine的與start_server(端口ENV['PORT'])和我的Web程序偶爾需要溝通用它。

我的問題是Web過程如何知道與它進行通信的端口?如果我正確理解heroku,它會在進程啓動時爲您指定一個隨機端口(並且如果ps被終止或重新啓動,它可能會更改)。謝謝!

回答

3

流程是孤立的,不能直接相互溝通。

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

有,但是,其他一些方法。一種是使用支持服務,如Redis或Postgres充當中介 - 另一種是使用FIFO進行通信。

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

這是你的過程是分離和無共享是件好事,但你確實需要架構你的應用程序略有不同,以適應這一點。

+2

是的我可以在redis中做一個fifo隊列或者其他東西,但是你確定這是關於進程無法相互通信的嗎? Eventmachine服務器/客戶端可以通過標準tcpip相互交談,就像web進程接受傳入的tcpip請求一樣。我只是不知道連接什麼端口。謝謝你的回答 - Adam Wiggins的12頁面頁面非常有趣。 – 2012-03-05 19:06:01

+1

是的。您的Web進程被分配了一個端口來接收來自外部世界的請求 - 沒有其他進程間通信。在這裏看到類似的問題:http://stackoverflow.com/questions/9322599/tcp-socket-communication-between-processes-on-heroku-worker-dyno/9453432#9453432 – 2012-03-05 22:34:41

+1

好酷感謝,這是有幫助的。我最終使用Redis工作的pub/sub模型。雖然它不耐用,所以我可以在此之後嘗試iron_mq,然後從eventmachine中進行輪詢。謝謝您的幫助!對此,我真的非常感激。 – 2012-03-16 07:48:53

1

根據Heroku的文檔,在同一賽道運行可以通過使用任何他們想要的端口進行通信的TCP/IP

兩個進程。

運行在上的兩個進程不同 dynos根本無法通過TCP/IP進行通信。他們需要使用memcached或數據庫或Heroku插件之一進行通信。

+0

當前版本的文檔是[here](https://devcenter.heroku.com/articles/dynos#networking) – weibeld 2017-12-11 22:10:40

相關問題