2012-03-05 24 views
5

Tôi có một Procfile như vậy:Giao tiếp giữa hai quá trình trên Heroku (những gì cổng để sử dụng)

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

Quá trình em cháy lên một eventmachine với start_server (cổng ENV['PORT']) và quá trình web của tôi thỉnh thoảng cần phải giao tiếp với nó.

Câu hỏi của tôi là quy trình web biết cổng giao tiếp với nó như thế nào? Nếu tôi hiểu chính xác heroku nó sẽ gán cho bạn một cổng ngẫu nhiên khi quá trình khởi động (và nó có thể thay đổi nếu ps bị giết hoặc khởi động lại). Cảm ơn!

Trả lời

3

Quy trình được cách ly và không thể giao tiếp trực tiếp với nhau.

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

Có một số cách khác. Một là sử dụng một dịch vụ sao lưu như Redis, hoặc Postgres để hoạt động như một trung gian - khác là sử dụng FIFO để giao tiếp.

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

Đó là một điều tốt mà quá trình của bạn đang bị cô lập và chia sẻ-không có gì, nhưng bạn cần phải kiến ​​trúc ứng dụng của bạn hơi khác nhau để phù hợp này.

+2

Đúng, tôi có thể làm một hàng đợi năm mươi trong redis hoặc một cái gì đó, nhưng bạn có chắc chắn đó là về các quá trình không thể giao tiếp với nhau? Máy chủ/máy khách Eventmachine có thể nói chuyện với nhau qua tcpip tiêu chuẩn giống như quy trình web chấp nhận yêu cầu tcpip đến. Tôi chỉ không biết cổng để kết nối. Cảm ơn câu trả lời mặc dù - trang 12factor của Adam Wiggins thực sự thú vị. –

+1

Có. Quy trình web của bạn được gán một cổng để nhận các yêu cầu từ thế giới bên ngoài - không có liên lạc quy trình liên ngành nào khác. Xem câu hỏi tương tự ở đây: http://stackoverflow.com/questions/9322599/tcp-socket-communication-between-processes-on-heroku-worker-dyno/9453432#9453432 –

+1

Ok cảm ơn, điều này rất hữu ích. Tôi đã kết thúc bằng cách sử dụng một pub/mô hình phụ với Redis mà làm việc. Mặc dù nó không bền, vì vậy tôi có thể thử iron_mq sau này và thăm dò ý kiến ​​nó từ eventmachine thay thế. Cảm ơn đã giúp đỡ! Tôi rất trân trọng điều này. –

1

Theo tài liệu Heroku,

Hai tiến trình đang chạy trên cùng một Dyno có thể giao tiếp qua TCP/IP sử dụng bất cứ điều gì họ muốn cổng.

Hai quy trình chạy trên khác nhau dynos hoàn toàn không thể giao tiếp qua TCP/IP. Họ cần phải sử dụng memcached, hoặc cơ sở dữ liệu, hoặc một trong các plugin Heroku, để giao tiếp.

+0

Phiên bản hiện tại của tài liệu này là [tại đây] (https://devcenter.heroku.com/articles/dynos#networking) – weibeld

Các vấn đề liên quan