Skip to content

alemolamg/pychat

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

38 Commits
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Chat en Python

Planteamiento

¿En qué consiste?

La prueba consistiría en realizar un chat entre dos PC usando Python en una arquitectura clientes/servidor.

Script a) - Servidor

Script b) - Clientes

El objetivo es que 2 clientes se conecten al servidor, y a partir de ahí, ambos puedan intercambiarse mensajes.

Connection picture

Todos los mensajes, los debes guardar en un log de mensajes.

Los mensajes que se envian deben ser de forma asíncrona (enviar mensajes sin necesidad de una recepción previa).

Puntos Clave

  • Buenas prácticas de programación.
  • Control de errores
  • Código comentado (inglés).
  • Estructura de código (estructuración de clases, etc).
  • Sistema dockerizado (separar docker servidor y docker cliente).

Desarrollo

Servidor

Para comenzar se ha creado el servidor, donde se administra las conexiones de los usuarios, reenvía los mensajes a los clientes y guarda los mensajes recibidos en el archivo llamado chat_history.log.

Para llevar a cabo las conexiones, se ha utilizado la clase socket, con la configuración: socket(socket.AF_INET, socket.SOCK_STREAM); donde el argumento socket.AF_INET especifica que se utilizará la familia de direcciones de Internet IPv4. El argumento socket.SOCK_STREAM nos especifica que estamos ante un socket de flujo. Los socket de flujo proporcionan una conexión bidireccional y confiable entre dos programas, utilizando el protocolo TCP.

Otra característica del Script de Servidor es la capacidad de guardar los mensajes recibidos en un archivo de logs chat_history.log. Los mensajes se guardarán con la hora de llegada al servidor justo antes de mandarlos al resto de usuarios. De esta manera nos aseguramos que siempre tenemos los mensajes guardados aunque se desconecte algún receptor.

Cliente

El siguiente paso fue crear el cliente, que es capaz de recibir y enviar mensajes de forma asíncrona. Para solucionar este problema se usa la clase ThreadPoolExecutor, que permite utilizar diferentes hilos para todas las acciones y conseguir recibir y/o enviar mensajes sin tener que esperar a que termine otro proceso.

El primer paso fue configurar el socket para que pueda conectar con el servidor. Posteriormente nos conectamos al servidor usando la dirección IP y el puerto correspondiente. A la hora de enviar o recibir los mensajes, se ha optado por el uso de dos hilos Threadpoolexecutor, uno para la función de recibir y otro para la de enviar.

Común

Para terminar, se ha creado un archivo main.py para cada servicio, de cara a poder parametrizarlo a la hora de elegir la dirección IP del servidor.

Docker

Se han creado dos archivos dockerfile, uno en cada carpeta para crear las imagenes. Los comandos para crear las imagenes son:

Server: docker build -t pychat-server ./server/

Client: docker build -t pychat-client ./client/

Para ejecutar los docker, se han usado los siguientes comandos sobre los ficheros dockerfile:

Creación de la network: docker network create chatNetwork.

Server: docker run -it -p 12345:12345 --name=pychat-server --network=chatNetwork pychat-server

Clients: docker run -it --network chatNetwork pychat-client pychat-server

Al cliente le pasamos un parámetro pychat-server para identificar el servidor.

Fuentes documentales

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages