1

大多数 Web 应用程序都是非常标准的 CRUD。我需要一些数据在创建时实时推送给客户端。是否值得为 AJAX 运行一个单独的、更轻量级的堆栈(例如 Sinatra 或 EventMachine)?

如果我运行一个堆栈,我将有 Rails 的开销。这可能需要更多 Rails 进程/服务器,那么如何在没有数据库查询的情况下在这些进程/服务器之间进行通信?零MQ?最后,Rails 是否适合处理数百个并发连接?

如果我运行两个堆栈,我将需要复制授权逻辑。

哪些方法对您来说是成功的?

4

1 回答 1

1

在 Rails 3 中,您可以很容易地使用新的路由语法并从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  
于 2010-11-01T07:30:32.823 回答