Ahora que estamos un poco más familiarizados con el uso de traits hablemos de uno en particular que nos ayudará a poder limpiar nuestro servidor después de terminar de hacer cada petición.
Por el momento tenemos un proyecto que cuando lo corremos nos da un servidor multiproceso, también obtenemos algunas advertencias sobre el workers, id y thread, que no estamos utilizando de una manera directa que nos recuerda que no estamos limpiando nada. Al momento que queremos apagarlo, usamos la técnica que nunca falla Ctrl + C en nuestra terminal, eso hace que apaguemos nuestro servidor, por consecuencia, termina todo los subprocesos que se encuentran activos.
En este tipo de casos es cuando podríamos usar el trait Drop, o mejor conocido como Destructor, solo tiene un método: drop, que se llama automáticamente cuando un objeto sale del alcance. El uso principal del rasgo Drop es liberar los recursos que posee la instancia.
Solo hay dos métodos que se pueden usar por Drop:
fn drop(&mut self)
Este método es llamado principalmente cuando el valor está fuera del scope.
Y por otro lado, tenemos el método Panic. que automáticamente destruye el proceso al momento de ser llamado.
Dentro de nuestro proyecto, ¿por qué se podría implementar Drop? Ya que generalmente se trabaja con structs, dentro de nuestro proyecto tenemos un tamaño y contador de procesos, podemos hacer uso de Drop, para hacer que ese contador baje a cero, cuando esto suceda, pueda apagar y limpiar nuestro proceso. Esto haría que nuestro servidor se apague y se limpie de una manera elegante.
Intentan implementarlo en tu proyecto, de qué manera crees que podamos apagar el servidor, como lo tenemos hasta el momento.
Deja en tus comentarios en qué otro tipo de situaciones podemos hacer uso de este trait.
Diego Forero
Sebastian Londoño
Sebastian Londoño
Gerardo Alberto Soto Alvarez del Castillo
Gerardo Alberto Soto Alvarez del Castillo
Gerardo Alberto Soto Alvarez del Castillo
Gerardo Alberto Soto Alvarez del Castillo
Esta es la forma correcta de parar un proceso y es conocido como graceful shutdown
buen día, pudiste reproducir el resto del proyecto? sabes si la profesora tiene algún repo donde este la solución? no pude encontrar los archivos de este curso
la solución completa del proyecto: https://github.com/vodelerk/rustyreview
Ufff... después de varias horas de investigación (y las que faltan), y el apoyo de los compañeros de este curso, logre que el servidor funcionara, y además, dentro de un Docker <3 Comprobación:
para cualquier duda, aquí estamos!
Tarea: ¿Qué otro tipo de situaciones podemos hacer uso del trait drop? R: Para detener un proceso que esta utilizando un bloqueo de tipo Arc lock() para que otros procesos puedan consumir los mismos recursos.
¿Podríamos utilizar el trait drop cuando ocurra una excepción? como un try & catch, y cuando ocurra un problema, se tenga que volver a crear el proceso.
La documentación de esta clase sobre Drop ++(con ejemplos)++