我有一個Procfile像這樣:在Heroku上兩個進程之間的通信(使用什麼端口)
web: bundle exec rails server -p $PORT
em: script/eventmachine
的em
過程中觸發了一個EventMachine的與start_server
(端口ENV['PORT']
)和我的Web程序偶爾需要溝通用它。
我的問題是Web過程如何知道與它進行通信的端口?如果我正確理解heroku,它會在進程啓動時爲您指定一個隨機端口(並且如果ps被終止或重新啓動,它可能會更改)。謝謝!
是的我可以在redis中做一個fifo隊列或者其他東西,但是你確定這是關於進程無法相互通信的嗎? Eventmachine服務器/客戶端可以通過標準tcpip相互交談,就像web進程接受傳入的tcpip請求一樣。我只是不知道連接什麼端口。謝謝你的回答 - Adam Wiggins的12頁面頁面非常有趣。 – 2012-03-05 19:06:01
是的。您的Web進程被分配了一個端口來接收來自外部世界的請求 - 沒有其他進程間通信。在這裏看到類似的問題:http://stackoverflow.com/questions/9322599/tcp-socket-communication-between-processes-on-heroku-worker-dyno/9453432#9453432 – 2012-03-05 22:34:41
好酷感謝,這是有幫助的。我最終使用Redis工作的pub/sub模型。雖然它不耐用,所以我可以在此之後嘗試iron_mq,然後從eventmachine中進行輪詢。謝謝您的幫助!對此,我真的非常感激。 – 2012-03-16 07:48:53