Итак, у меня многолетний процесс Ruby, который выполняет самые разные функции, в зависимости от того, что ему было сказано (EventMachine TCP-сервер с двоичными сообщениями). Теперь я хотел бы дать определенным людям возможность контролировать, изменять, закрывать данный процесс через веб-интерфейс. Я планирую использовать для этого Sinatra.rb, однако я открыт для лучших альтернатив.Практика для управления приложением Ruby «снаружи»
Моя первоначальная идея состояла в том, чтобы запустить веб-интерфейс Sinatra (он основан на Rack, для тех, кто не знаком с Sinatra) внутри Thread
и позволяет ему работать в фоновом режиме.
Однако, я думал, что это может повлиять на производительность, если я делаю это именно так, поэтому я решил посмотреть в IPC способности и альтернативные реализации для Ruby (resque, совместного использования памяти, named pipes и т.д.).
Мне очень понравилась идея resque (и имя действительно остроумно), но я не совсем уверен, что это то, что мне нужно, или если это может быть излишним. На самом деле, я даже не уверен, как наилучшим образом реализовать его с помощью Sinatra и EventMachine (хотя я не прочитал полную документацию для resque, просто просмотрел ее быстро и прочитал примеры и примеры использования.).
Другая идея, которая пришла на ум, - использовать Sinatra внутри EventMachine::defer
, но разве это не то же самое, что создавать новый Thread
?
Я никогда не делал ничего серьезного, используя Fiber
s, поэтому я не знаю их полностью потенциал, но они действительно пересекли мой разум.
Итак, какая из этих (или предложить лучше) практика является лучшей для Ruby PCI.
Благодаря
Это очень много вопросов в одном. Постарайся быть более конкретным и, возможно, сделать несколько прототипов. Большинство упомянутых методов не так уж сложно настроить. –
@BenjaminUdinktenCate Я знаю, но я думал, что попрошу кого-то более опытного (или у кого есть аналогичная проблема) предложить лучшую технику. – omninonsense