Sinatra y Rails son ambos frameworks web. Proporcionan abstracciones comunes de desarrollo web, como enrutamiento, creación de plantillas, servicio de archivos, etc.
node.js es muy diferente. En esencia, node.js es una combinación de V8 y bibliotecas de eventos, junto con una biblioteca estándar orientada a eventos. node.js es mejor en comparación con EventMachine para Ruby.
Por ejemplo, aquí es un servidor HTTP basado en eventos, utilizando 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
}
Y aquí es un ejemplo Node.js:
var http = require('http');
http.createServer(function (req, res) {
res.writeHead(200, {'Content-Type': 'text/plain'});
res.end('Hello world');
}).listen(8000);
La ventaja de este enfoque es que el servidor doesn 'bloquear en cada solicitud (se pueden procesar en paralelo)!
node.js tiene todo su standard library built around the concept of events, lo que significa que es mucho más adecuado para cualquier problema relacionado con E/S. Un buen ejemplo sería un chat application.
Sinatra y Rails son marcos web muy refinados, estables y populares. node.js tiene algunos frameworks web pero ninguno de ellos tiene la calidad de ninguno de estos en este momento.
Fuera de las opciones, si necesitaba una aplicación web más estable, optaría por Sinatra o Rails. Si necesitaba algo más altamente escalable y/o diverso, me gustaría ir a node.js