我正在尝试理解现在存在的一些较新的Web编程框架之间的差异,即Node.js,Rails和Sinatra。
有人能给我一个最适合每个框架的应用程序示例吗?
也就是说,什么是最适合Node.js而不是Rails或Sinatra的应用程序,什么是最适合Rails的应用程序,而不是Node.js和Sinatra等... ..
答案 0 :(得分:10)
Sinatra和Rails都是Web框架。它们提供常见的Web开发抽象,例如路由,模板,文件服务等。
node.js非常不同。在它的核心,node.js是V8和事件库的组合,以及面向事件的标准库。与EventMachine for Ruby相比,node.js更好。
例如,这是一个基于事件的HTTP服务器,使用EventMachine:
require 'eventmachine'
require 'evma_httpserver'
class MyHttpServer < EM::Connection
include EM::HttpServer
def post_init
super
no_environment_strings
end
def process_http_request
response = EM::DelegatedHttpResponse.new(self)
response.status = 200
response.content_type 'text/plain'
response.content = 'Hello world'
response.send_response
end
end
EM.run{
EM.start_server '0.0.0.0', 8080, MyHttpServer
}
这是一个node.js示例:
var http = require('http');
http.createServer(function (req, res) {
res.writeHead(200, {'Content-Type': 'text/plain'});
res.end('Hello world');
}).listen(8000);
这种方法的好处是服务器不会阻止每个请求(它们可以并行处理)!
node.js的整个standard library built around the concept of events意味着它更适合任何I / O绑定的问题。一个很好的例子是chat application。
Sinatra和Rails都是非常精致,稳定和流行的Web框架。 node.js有一些Web框架,但目前其中任何一个都没有。
在选择中,如果我需要一个更稳定的Web应用程序,我会选择Sinatra或Rails。如果我需要更具高度可扩展性和/或多样性的东西,我会选择node.js