Запуск сокет-сервера в ruby ​​на рельсах в облачных средах (героку) - PullRequest
3 голосов
/ 05 мая 2010

Я использую heroku, и я могу просто толкнуть приложение Ruby on Rails, я пытаюсь преобразовать это в сервер Socket, в основном мне нужно привязать к открытому порту, в этом случае я знаю Героку только делает 80 22 и 443.

Возможно ли связать порт 80 в этих средах?

Кроме того, как бы мне настроить точку входа для этого сокет-сервера, все, что я знаю, это то, что когда скрипт / сервер загружает приложение.

Должен ли я поместить вызов функции туда? Как можно запустить сервер сокетов вместо приложения rails поверх того, что есть на сервере heroku.

Ответы [ 2 ]

4 голосов
/ 05 мая 2010

В настоящее время нет способа направить не-HTTP-трафик в ваше приложение. Heroku связывает веб-серверы Ruby с различными портами и хостами за кулисами, а затем направляет трафик к этим процессам на основе хоста в заголовке HTTP. Предполагается, что запросы продолжительностью более 30 секунд зависают и прекращаются.

С точки зрения дизайна, длительные запросы представляют значительную проблему производительности. При использовании одной динамограммы любой запрос, который длится 30 секунд (или даже 2 секунды), не позволяет любому другому пользователю получить доступ к вашему сайту на весь период. Вместо этого, более производительный дизайн состоит в том, чтобы быстро обслуживать страницу в базовом состоянии и использовать рабочий поток для обработки содержимого в фоновом режиме, извлекая результаты через javascript. Это можно сделать просто с помощью современных инструментов веб-разработки.

Если у вас есть длительный процесс, с которым вам не нужно взаимодействовать через сокет, вы можете просто использовать рабочий. Я бы порекомендовал такой инструмент, как MongoDB для хранения результатов вычислений, и такую ​​библиотеку, как Delayed :: Job для организации очередей.

Сказав все это, есть определенно разумные варианты использования, которые требуют более длительных процессов и трафика не-HTTP, но в настоящий момент Heroku их не поддерживает.

1 голос
/ 05 мая 2010

Я не думаю, что это возможно на Heroku. Они не поддерживают такую ​​архитектуру, и вы имеете ограниченный контроль над тем, что вы можете запускать в среде.

Возможно, стоит взглянуть на только что анонсированную поддержку Node.js ... в настоящее время в бета-версии, но может дать вам кое-что для работы.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...