doc stream helper in Spanish readme

This commit is contained in:
Gabriel Andretta 2011-08-22 16:41:07 -03:00
parent 4f37978634
commit 28db7486ef
1 changed files with 50 additions and 0 deletions

View File

@ -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