Giter VIP home page Giter VIP logo

pychat's Introduction

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

pychat's People

Contributors

alemolamg avatar

Watchers

 avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.