From 28db7486ef25588faf5440c0f84112ef9efd0564 Mon Sep 17 00:00:00 2001 From: Gabriel Andretta Date: Mon, 22 Aug 2011 16:41:07 -0300 Subject: [PATCH] doc stream helper in Spanish readme --- README.es.rdoc | 50 ++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 50 insertions(+) diff --git a/README.es.rdoc b/README.es.rdoc index a1eb26cb..8b02d941 100644 --- a/README.es.rdoc +++ b/README.es.rdoc @@ -842,6 +842,56 @@ De manera similar, también podés asignar el código de estado y encabezados: También, al igual que +body+, tanto +status+ como +headers+ pueden utilizarse para obtener sus valores cuando no se les pasa argumentos. +=== Streaming De Respuestas + +A veces vas a querer empezar a enviar la respuesta a pesar de que todavía no +terminaste de generar su cuerpo. También es posible que, en algunos casos, +quieras seguir enviando información hasta que el cliente cierre la conexión. +Cuando esto ocurra, el +stream+ helper te va a ser de gran ayuda: + + get '/' do + stream do |out| + out << "Esto va a ser legen -\n" + sleep 0.5 + out << " (esperalo) \n" + sleep 1 + out << "- dario!\n" + end + end + +Podés implementar APIs de streaming, +{Server-Sent Events}[http://dev.w3.org/html5/eventsource/] y puede ser usado +como base para {WebSockets}[http://es.wikipedia.org/wiki/WebSockets]. También +puede ser usado para incrementar el throughput si solo una parte del contenido +depende de un recurso lento. + +Hay que tener en cuenta que el comportamiento del streaming, especialmente el +número de peticiones concurrentes, depende del servidor web utilizado para +servir la aplicación. Puede que algunos servidores, como es el caso de +WEBRick, no soporten streaming directamente, así el cuerpo de la respuesta será +enviado completamente de una vez cuando el bloque pasado a +stream+ finalice su +ejecución. + +Cuando se pasa +false+ como parámetro, no se va a enviar el mensaje +close+ al +objeto de stream. Queda en vos cerrarlo en el punto de ejecución que quieras. +Nuevamente, hay que tener en cuenta que este comportamiento es posible solo en +servidores que soporten eventos, como Thin o Rainbows. El resto de los +servidores van a cerrar el stream de todos modos. + + set :server, :thin + conexiones = [] + + get '/' do + # mantenemos abierto el stream + stream(false) { |salida| conexiones << salida } + end + + post '/' do + # escribimos a todos los streams abiertos + conexiones.each { |salida| salida << params[:mensaje] << "\n" } + "mensaje enviado" + end + === Log (Registro) En el ámbito de la petición, el helper +logger+ (registrador) expone