diff --git a/ServidorConcurrente/servidor.rb b/ServidorConcurrente/servidor.rb new file mode 100644 index 0000000..9cfade3 --- /dev/null +++ b/ServidorConcurrente/servidor.rb @@ -0,0 +1,45 @@ +require 'socket' + +numCon = 0 +maxCon = 10 + +def respond(socket, code, body) # Genera prespuestas + socket.puts "HTTP/1.0 #{ code }" + socket.puts "Content-type: text/html" + socket.puts "Content-length: #{ body.length }" + socket.puts + socket.puts body + socket.close +end + +server = TCPServer.open(8080) +puts "web server created at port 8080" +loop do + if(numCon < maxCon) + sock = server.accept # Acepta conexión del cliente + t = Thread.new(sock) do |socket| + numCon=numCon+1 + request = socket.gets # Lee la primera línea + o = socket.gets until ( o != "") # cabecera acaba con lí­nea vacía + + unless request =~ /^GET/ # Si el comando no esta soportado + respond socket, "400 Bad Request", "

Comando desconocido

" + next # Acaba el ciclo + end + request =~ /^GET \/(.*) .*/ # GET /(fichero) HTTP/1.x + path = $1 + if path == "" || path =~ /\/$/ then path += "index.html" end # Inserta index.html + if File.exists?(path) + file = open(path) # Lee fichero y prepara respuesta + puts "OK #{ path }" + respond socket, "200 OK", file.read + else + puts "NotFound #{ path }" # Si el fichero no existe + respond socket, "404 Not Found", "

Recurso no encontrado

" + end + numCon=numCon-1; + end + end +end + + diff --git a/servidor.rb b/servidor.rb new file mode 100644 index 0000000..9cfade3 --- /dev/null +++ b/servidor.rb @@ -0,0 +1,45 @@ +require 'socket' + +numCon = 0 +maxCon = 10 + +def respond(socket, code, body) # Genera prespuestas + socket.puts "HTTP/1.0 #{ code }" + socket.puts "Content-type: text/html" + socket.puts "Content-length: #{ body.length }" + socket.puts + socket.puts body + socket.close +end + +server = TCPServer.open(8080) +puts "web server created at port 8080" +loop do + if(numCon < maxCon) + sock = server.accept # Acepta conexión del cliente + t = Thread.new(sock) do |socket| + numCon=numCon+1 + request = socket.gets # Lee la primera línea + o = socket.gets until ( o != "") # cabecera acaba con lí­nea vacía + + unless request =~ /^GET/ # Si el comando no esta soportado + respond socket, "400 Bad Request", "

Comando desconocido

" + next # Acaba el ciclo + end + request =~ /^GET \/(.*) .*/ # GET /(fichero) HTTP/1.x + path = $1 + if path == "" || path =~ /\/$/ then path += "index.html" end # Inserta index.html + if File.exists?(path) + file = open(path) # Lee fichero y prepara respuesta + puts "OK #{ path }" + respond socket, "200 OK", file.read + else + puts "NotFound #{ path }" # Si el fichero no existe + respond socket, "404 Not Found", "

Recurso no encontrado

" + end + numCon=numCon-1; + end + end +end + +