大多数Web应用程序都是非常标准的CRUD。我需要一些数据在创建时推送到客户端。是否值得为AJAX运行一个单独的,更轻量级的堆栈(如Sinatra或EventMachine)?
如果我运行一个堆栈,我将有Rails的开销。这可能需要更多的Rails进程/服务器,因此如何在没有数据库查询的情况下进行通信? ZeroMQ?最后,Rails是否适合处理数百个并发连接?
如果我运行两个堆栈,我需要复制授权逻辑。
哪种方法对你有用?
答案 0 :(得分:1)
在Rails 3中,您可以使用新的路由语法轻松挂接Rack应用,并继承ActionController::Metal
的控制器或仅定义self.call
。
拥有read(或观看)Railscast#222并查看wycats' blog(请参阅下面的示例摘录)。
如果你走下这条赛道,你已经意识到了你需要处理的其他情况,所以在遇到它之前一定要确保它是必要的。在服务器上投入美元比在程序员上投入更便宜 - 硬件和带宽非常便宜。
我个人认为这种情况属于“过早优化”,除非你的应用已经在运行并且因为流量过大而窒息。
一些很好的例子:
# 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