Skip to content

Commit

Permalink
Primera version del informe
Browse files Browse the repository at this point in the history
  • Loading branch information
WagnerMarcos committed Nov 13, 2020
1 parent 40a57dc commit fcb3825
Show file tree
Hide file tree
Showing 5 changed files with 33 additions and 11 deletions.
Binary file added Acceptor.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
26 changes: 26 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
# Ejercicio 3

Alumno: Wagner Marcos
Padrón: 98607
github: https://github.com/WagnerMarcos/Taller-pages


## Introducción:

En este trabajo se desarrollará una aplicación servidor que atenderá petitorios HTTP, mediante los cuales podrá acceder y
dar alta a recursos del mismo.

## Estructura:

Se utilizó para el trabajo un servidor que engloba la resolución de petitorios. Contiene una clase aceptadora de clientes y un registro de petitorios disponibles.
El servidor procesa a cada cliente a través de un hilo separado lanzado por la clase aceptadora. Los hilos son guardados en un vector de hilos, y cada vez que un cliente sea aceptado, se consultará a los hilos guardados si alguno ya finalizó su ejecución para ser destruido.
Hay tres tipos de procesos corriendo en simultáneo durante la ejecución del programa.
El hilo principal es quien lanza al hilo de clase aceptadora para que solo se encargue de tratar con los clientes que desean conectarse. Luego de lanzar este hilo, se quedará esperando que el usuario ingrese la tecla 'q' para dejar de aceptar nuevos clientes cerrando el socket aceptador.
El hilo aceptador corre sobre la clase aceptadora y es la encargada de lanzar nuevos hilos por cada cliente que quiera realizar un petitorio. Al ser ser informada que no debe seguir aceptando, cierra su socket y espera para realizar la destrucción de los hilos que lanzó para cada cliente.
Los hilos de clientes tratan cada uno un petitorio realizado por un cliente. Reciben por socket lo enviado por el cliente, y consulta en el registro de petitorios para cumplir con lo pedido. Se encarga de recibir, parsear, y almacenar/recuperar lo pedido, para luego enviar una respuesta al cliente. Al ser varios clientes que consultan, almacenan y recuperan información de un mismo registro, se detectó a este registro como zona crítica donde puede darse una race condition.
Para tratar con el problema de la race condition en el registro de petitorios se implimentó una clase Lock dentro del registro de petitorios, y este registro funcionará de monitor bloqueando el acceso a sus métodos mientras haya un hilo accediendo.
La clase cliente recibe por entrada estándar el petitorio y la envía al servidor a través de sockets, para luego esperar e imprimir su respuesta.

### Diagrama de secuencias para creación de ThAcceptor y de ThClient

![Diagrama de secuencia](https://github.com/WagnerMarcos/Taller-pages/blob/master/tp3.png?raw=true)
3 changes: 1 addition & 2 deletions common_src/resource.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -27,9 +27,8 @@ void Resource::set_content_length(const std::string& v){
void Resource::set_body(std::stringstream& b){
std::string line;
while (getline(b, line)){
if(line.length() > 0)
if (line.length() > 0)
body += line + "\n";
// std::cout << "linea dentro de resource:" << line << std::endl;
}
}

Expand Down
15 changes: 6 additions & 9 deletions common_src/threquest.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -48,15 +48,11 @@ void ThRequest::process_get_method(std::stringstream& petition,
const std::string& resource_name,
std::string& protocol){
std::string body = resources.get_body(resource_name);
// if (body.length() == 0){
// response << "HTTP/1.1 404 NOT FOUND\n\n";
// return;
// }



if (resource_name == "/"){
response << "HTTP/1.1 200 OK\nContent-Type: text/html\n\n";
response << "HTTP/1.1 200 OK\nContent-Type: text/html\n\n";
response << body;
return;
} else {
response << "​HTTP/1.1 200 OK\n\n";
response << body;
Expand Down Expand Up @@ -101,9 +97,10 @@ void ThRequest::parse_first_petition_line(std::stringstream& petition,
std::cout << method;
if (resource_name.length() > 0)
std::cout << " " + resource_name;
if (protocol.length() > 0)
if (protocol.length() > 0){
std::cout << " " + protocol;
std::cout << std::endl;
std::cout << std::endl;
}
}

void ThRequest::parse_header(std::stringstream& petition, Resource& r){
Expand Down
Binary file added tp3.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.

0 comments on commit fcb3825

Please sign in to comment.