AJAX и Rails: два стека или один? - PullRequest
1 голос
/ 01 ноября 2010

Большая часть веб-приложений довольно стандартная CRUD.Мне нужно, чтобы некоторые данные передавались клиентам в режиме реального времени при их создании.Стоит ли запускать отдельный, более легкий стек (например, Sinatra или EventMachine) для AJAX?

Если я запускаю один стек, у меня будут накладные расходы Rails.Это может потребовать больше Rails процессов / серверов, так как я могу общаться между ними без запросов к базе данных?ZeroMQ?Наконец, подходит ли Rails для обработки сотен одновременных соединений?

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

Какие методы были для вас успешными?

1 Ответ

1 голос
/ 01 ноября 2010

В Rails 3 вы можете довольно легко подключить Rack-приложения, используя новый синтаксис маршрутизации и наследуя ваши контроллеры от ActionController::Metal или просто определяя self.call.

Имейте прочитайте (или посмотрите) Railscast # 222 и просмотрите блог wycats (см., Например, выдержки).

Вы уже знаете о дополнительных случаях, которые вам нужно будет обработать, если вы пойдете по этому пути, поэтому убедитесь, что это необходимо, прежде чем застрять в нем. Обычно дешевле сбрасывать $ на серверах, чем на программистов - оборудование и пропускная способность довольно дешевы.

Лично я чувствую, что это подпадает под «преждевременную оптимизацию», если ваше приложение уже не запущено и не забито слишком большим трафиком.


Несколько хороших примеров:

# config/routes.rb
# Hook in Sinatra
root :to => HomeApp
# Write your own barebones Rack compatible code
match "/processes" => ProcessesApp
# Even specify an inline proc
match "/heartbeat", :to => proc {|env| [200, {}, ["App is running"]] }

# /lib/home_app.rb
class HomeApp < Sinatra::Base  
  get "/" do  
    "Hello from Sinatra"  
  end  
end  

# lib/processes_app.rb
class ProcessesApp  
  def self.call(env)  
    [200, {}, [`ps -axcr -o "pid,pcpu, pmem, time, comm"`]]  
  end  
end  
...