Rails асинхронные задания (быстрый просмотр и минимальная задержка) - PullRequest
0 голосов
/ 17 марта 2011

Привет, я разработал приложение rails.

Когда один контроллер получает запрос, он отображает представление клиента И отправляет другое действие на светодиодный индикатор через TCP / IP. НО отправка материала на светодиодный индикатор занимает около 3 секунд. И у меня может быть 5-10 светодиодных индикаторов для отправки.

Это заблокирует визуализацию представления клиента. (Я могу использовать многопоточность для отправки на каждый индикатор тикера, но все равно придется задерживать 3-5 секунд, когда очередь потоков присоединяется)

Вопрос: Поскольку представление клиента не имеет никакого отношения независимо, если отправка на светодиод не удалась.

  1. Могу ли я сделать это асинхронной работой? КАК?
  2. Должен ли я заставить фоновый процесс Sinatra прослушивать материал и отправлять на светодиод приложение sinatra?

Спасибо!

Ответы [ 3 ]

1 голос
/ 17 марта 2011

Плагин spawn из https://github.com/tra/spawn должен работать хорошо и может использовать разветвление (по умолчанию), потоки или выходы.

Я использую spawn with fork для длительных, довольно тяжелых задач, и это работает как шарм. Простой пример будет:

spawn(:method => :fork) do
  do_led_stuff()
end

и, поскольку вам не требуется обратная связь со светодиодным индикатором, вам также не придется ждать () для порожденного процесса.

0 голосов
/ 17 марта 2011

Вы можете использовать Resque (https://github.com/defunkt/resque)

0 голосов
/ 17 марта 2011

Вы пробовали delayed_job (http://rubygems.org/gems/delayed_job)? Я не знаю, совместимо ли это с Синатрой, но, возможно, вы можете взглянуть на это.

...