visual studio microsoft espaƱol descargar community ruby sockets http web

ruby - microsoft - visual studio installer



El servidor web Ruby se cuelga al intentar analizar la solicitud HTTP (1)

Su llamada a socket.gets continuará esperando más datos después de que se haya enviado toda la solicitud, bloqueando cualquier progreso posterior. No tiene forma de saber que se trata de una llamada HTTP y que la solicitud ha finalizado.

Una solicitud HTTP consiste en los encabezados y luego una línea en blanco que indica el final de los encabezados. Tu código necesita buscar esta línea en blanco. Usted puede hacer esto cambiando su ciclo a algo como esto:

while (line = socket.gets).chomp != ''''

Esto funcionará para solicitudes que no tienen un cuerpo, como GET , pero las cosas son más difíciles cuando procesamos solicitudes con cuerpos. En ese caso, deberá analizar los encabezados de Content-Length para saber la cantidad de datos que se deben leer desde el socket. Aún es más complejo aún para solicitudes fragmentadas , puede que no necesites llegar tan lejos en tu tarea.

Estoy trabajando en una tarea que me obliga a implementar un servidor web en Ruby sin usar ninguna biblioteca. Tengo una configuración de servidor básica para devolver una respuesta de "Hello World" y estoy listo para pasar al siguiente paso.

El siguiente paso es generar respuestas HTTP basadas en las solicitudes HTTP. Aquí es donde estoy teniendo problemas, parece que el ciclo while en mi programa hace que el servidor se cuelgue.

El código para el servidor web:

require ''socket'' server = TCPServer.new(''localhost'', 2345) http_request = "" loop do socket = server.accept request = socket.gets while line = socket.gets puts line http_request << line end response = "Hello World!/n" socket.print "HTTP/1.1 200 OK/r/n" + "Content-Type: text/plain/r/n" + "Content-Length: #{response.bytesize}/r/n" + "Connection: close/r/n" socket.print "/r/n" socket.print response puts "DONE with while loop!" socket.close end

En el código anterior, estoy tratando de poner la solicitud HTTP en una cadena http_request y analizar eso para determinar qué respuesta HTTP quiero generar. Probé mi código sin el ciclo while y pude acceder a la página Hello World en mi navegador usando localhost:2345/test . Sin embargo, con la adición del ciclo while, ya no puedo cargar la página y la cadena "DONE with while loop!" nunca se imprime en la consola.

¿Alguien sabe por qué mi servidor web se cuelga? ¿Me estoy acercando al problema completamente mal?