significado salida que programacion estándar http lua cgi stdout luvit

http - salida - Streaming stdout a una página web



stdout significado (1)

Parece que debería ser algo realmente simple de lograr, desafortunadamente el desarrollo web nunca fue mi punto fuerte.

Tengo varios guiones y me gustaría lanzarlos desde una página web y ver el texto estándar en tiempo real en la página. Algunos de los scripts tardan mucho tiempo en ejecutarse, por lo que la respuesta individual normal no es lo suficientemente buena (ya lo tengo funcionando).

Por lo que puedo ver, mis opciones son

  • stdout a un archivo, y periódicamente (cada dos o tres segundos) envía una solicitud del cliente y responde con el contenido de este archivo.

  • ¿Chunked HTTP responses? No estoy seguro de si esto es para lo que se usan, intenté implementar esto ya, pero creo que puedo estar malinterpretando su propósito.

  • Websockets (estoy usando un servidor Luvit así que esta no es una opción).

  • ... ¿Algo más?

Estoy seguro de que debe haber una forma estándar de lograrlo, veo que otros sitios lo hacen todo el tiempo. Teamcity por ejemplo. ¿O salas de chat (tomas TCP de vanilla?).

Cualquier indicador en la dirección correcta apreciado. El método más simple posible, si eso es solo enviar muchas solicitudes programadas del cliente, entonces que así sea.


Eso me recuerda mucho a CGI .

Sus propias ideas suenan todas en la dirección correcta. Como está utilizando un script de shell y algunas interacciones potencialmente no triviales con el servidor web, creo que podría tener sentido señalar dónde buscar ejemplos de este tipo de código, que era común hace mucho tiempo, y muy propenso, básicamente, siempre.


Prácticamente, su secuencia de comandos es una secuencia de comandos CGI, haciendo cosas típicas.

En los días y años anteriores de Internet, esa era la "forma normal" de implementar una página web que no son solo archivos estáticos (HTML u otros). La página se implementa básicamente como un script de shell (o cualquier otro programa que lea de stdin y escriba a stdout).

Parte de lo que estás haciendo / proponiendo es muy similar, y creo que hay lecciones útiles para aprender del viejo código CGI.
Por ejemplo, obtener el almacenamiento en búfer desde dentro del script durante sdtout, a través del servidor web en la página del cliente puede ser complicado, por supuesto. Por lo tanto, cavar viejos ejemplos podría ayudar mucho.

(Mucho de esto puede ser obvio para usted, el OP, personalmente, entonces tome al "usted" como lector potencial)
La parte difícil en general será el almacenamiento en búfer, espero. Si está acostumbrado a manejar explícitamente búferes stdin / out en shell, para programas que no lo admiten, se puede imaginar el tipo de cosas esperadas, pero si no está acostumbrado: recuerdo que CGI es peor, ya que tiene que obtener el almacenamiento en búfer del servidor HTTP también está sincronizado (esperemos que se maneje automáticamente), así que quizás comiencen a hacer preguntas / busque ejemplos temprano.


La forma de estilo CGI sería exactamente lo que ha implementado ahora, y si el almacenamiento en búfer es correcto, debería ser lo más real posible. Pero entiendo que obtienes tiempos de espera debido al largo tiempo de ejecución? ¿O tienes tiempos de ejecución muy variables?

En términos de obtenerlo en tiempo real como sea posible, no hay nada mejor que escribir stdout en la secuencia http.
(Supongo que aceptamos la sobrecarga de ir a través de un servidor HTTP.) Además, estoy pensando en el almacenamiento en línea de la memoria, por lo que no vaciar cada char, ¿es eso lo suficientemente bueno para el caso de uso? (es decir, no hay líneas de indicador de progreso animado / escapes ANSI que desee ver en tiempo real)
Entonces quizás lo mejor es trabajar sobre los problemas como los tiempos de espera, pero mantener el concepto. Si el tiempo real no es tan importante, otras formas pueden ser mejores de muchas maneras, por supuesto. Un punto sería que podrían requerirse otros métodos para cualquier escalabilidad.