Sinatra и Rails являются веб-фреймворками. Они предоставляют общие абстракции веб-разработки, такие как маршрутизация, создание шаблонов, обслуживание файлов и т. Д.
node.js очень отличается. По своей сути, node.js представляет собой комбинацию V8 и библиотек событий вместе со стандартной библиотекой, ориентированной на события. node.js лучше, чем EventMachine для Ruby.
Например, вот 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 есть вся стандартная библиотека , построенная на концепции событий , что означает, что она намного лучше подходит для любой проблемы, связанной с вводом / выводом. Хорошим примером может служить приложение чата .
Sinatra и Rails - очень изысканные, стабильные и популярные веб-фреймворки. В node.js есть несколько веб-фреймворков, но на данный момент ни один из них не соответствует ни одному из них.
Если бы мне не понадобилось более стабильное веб-приложение, я бы выбрал Sinatra или Rails. Если бы мне нужно что-то более масштабируемое и / или разнообразное, я бы выбрал node.js