IIC2233 / syllabus-2020-2

Repositorio oficial del curso IIC2233 Programación Avanzada 🎉🎊
https://iic2233.github.io
7 stars 57 forks source link

Forma apropiada de almacenar información en el servidor y comunicación efectiva #1200

Closed amahns1 closed 3 years ago

amahns1 commented 3 years ago

Prerrequisitos

(Marcar colocando una X entre los corchetes los ítems que ya hiciste, así: "[X]")

¡Hola!

Me surgió una duda para implementar una comunicación efectiva entre servidor y cliente. Hasta ahora estoy almacenando la información en distintos diccionarios en el servidor. Por ejemplo, para enviar al cliente los datos necesarios al inicio de la partida (como los son el nombre, color y rivales), envío la información de maneras distintas para que el cliente pueda diferenciar lo que se está enviando. Me complica el hecho que siento que estoy haciendo un caso particular para cada cosa que se envía y siento que al avanzar en la tarea va a generar muchas complicaciones.

Otro punto que me complica es ir actualizando la información. En el servidor bastaría con actualizar los diccionarios, pero en el cliente es distinto. Enviar el diccionario completo al cliente a cada turno pareciera ser una opción válida pero no muy conveniente. Enviar una parte del diccionario es quizás más simple pero es complicado que el cliente entienda qué era lo que estaba antes y qué es nuevo.

Cuando el cliente escucha el servidor, lo hace mediante un loop. Entonces estoy haciendo casos particulares para que pueda diferenciar lo que se está enviando en cada "iteración" del loop.

¿Qué estrategias pueden usarse para que la comunicación entre cliente y servidor sea efectiva y que no se generen casos particulares?

Muchos saludos.

lucas-valenzuela commented 3 years ago

Hola @amahns1,

Dado que solo existe un canal de comunicación entre un cliente y el servidor, cada vez que envíes algo la otra parte tendrá que identificar qué tipo de información está recibiendo. En otras palabras, debes enviar data y "meta-data", y según la "meta-data", el programa deberá direccionar correctamente a la data que se recibe. Por ello, sería normal que el método que reciba la información tenga muchos ifs, direccionando la data enviada a donde correctamente debe ir.

Así, puedes enviar, por ejemplo, un item de un diccionario siendo la key la metadata y el value la data, o una tupla o lista de tamaño 2. No es necesario enviar siempre toda la información, sino que solamente la que se va modificando.

Espero esto te sea de ayuda

amahns1 commented 3 years ago

Sii Gracias @lucasprato!