Diferència entre revisions de la pàgina «Xat amb ZEO»

De Cacauet Wiki
Salta a la navegació Salta a la cerca
Línia 13: Línia 13:
 
* Per defecte podeu utilitzar el canal "test". Després ho sofisticarem una mica més.
 
* Per defecte podeu utilitzar el canal "test". Després ho sofisticarem una mica més.
 
* Cal que cada usuari que es connecta tingui un "nick" i que el demani al connectar.
 
* Cal que cada usuari que es connecta tingui un "nick" i que el demani al connectar.
 +
* Per sortir cal posar "exit" al prompt del xat.
  
  
Línia 21: Línia 22:
 
* Fer una petita aplicació amb PyQt i Qt-Designer que faciliti la visualització de la conversa.
 
* Fer una petita aplicació amb PyQt i Qt-Designer que faciliti la visualització de la conversa.
 
* També ho podeu resoldre amb Pyramid i un servei web.
 
* També ho podeu resoldre amb Pyramid i un servei web.
 
  
 
== Problema de concurrència ==
 
== Problema de concurrència ==

Revisió del 17:03, 24 abr 2013

Cal elaborar un programa de xat utilitzant el servidor ZODB per xarxa, és a dir, el ZEO:

Consultar:


Especificacions de l'exercici

Especificacions:

  • Connectar-se al servidor ZEO de la màquina del professor (us indicarà les dades, host i port, a classe).
  • Accediu a l'element arrel (root) = diccionari.
  • Podeu llistar les keys del diccionari. Cadascuna serà un canal de xat.
  • Cada canal de xat serà una llista de Missatges (veure especificació de la classe més avall).
  • Per defecte podeu utilitzar el canal "test". Després ho sofisticarem una mica més.
  • Cal que cada usuari que es connecta tingui un "nick" i que el demani al connectar.
  • Per sortir cal posar "exit" al prompt del xat.


Recomanacions:

  • Inicialment podem fer el programa per consola. Demanem el nick i llistem tots els missatges existents cada cop que aportem alguna cosa.
  • Modifiquem l'aplicació per tal que només ens mostri els darrers missatges enviats des del darrer cop (utilitzant el timestamp o "temps").
  • Afegir un timer per tal que actualitzi la llista de missatges per pantalla si hi ha alguna aportació nova.
  • Fer una petita aplicació amb PyQt i Qt-Designer que faciliti la visualització de la conversa.
  • També ho podeu resoldre amb Pyramid i un servei web.

Problema de concurrència

Es pot donar un problema de concurrència quan 2 usuaris es connecten i actualitzen els missatges independentment.

La solució és sincronitzar la llista de missatges just abans de afegir el nou missatge a aportar. Llegiu aquí per saber més de la sync:

connexio.sync()
conversa = connexio.root()["test"]
# ...i afegim el nou missatge
# ...i li fem un commit


Classe Missatge

Per tal que l'aplicació sigui compatible convé que tots tinguem la mateixa classe Missatge.

# -*- coding: utf-8 -*-

import datetime

class Missatge(object):
    temps = 0
    nick = ""
    text = ""
    
    def __init__(self,nick,miss):
        self.temps = datetime.datetime.now()
        self.nick = nick
        self.text = miss