Chat-quiz
Reti di Calcolatori L-S
AA. 2003/2004
Rossella Rubino
Obiettivi
• realizzare chat-quiz
– comunicazione e sincronizzazione
– replicazione
2
Cosa è una chat-quiz?
• Applicazione che da la possibilità ai
suoi utenti di chattare e
contemporaneamente di partecipare
ad un quiz.
– le domande vengono inviate solo agli
utenti che si iscrivono al quiz
– l’utente che per primo risponde
correttamente accumula 1 punto.
3
Fasi di sviluppo
dell’applicazione
• Analisi
– casi d’uso
– scenari
• Progetto
– scelta del modello
– protocollo di comunicazione
– replicazione
• Implementazione
– linguaggio
– sistema di supporto
4
Analisi: casi d’uso
Progetto: modello (1)
msg(from(Bob),text(ciao))
….
….
msg(from(Alice),text(come va?))
…
…
msg(from(Bob),text(ho mal di denti))
…
+
Tuple 
C/S 

spazio di tuple
client
server
6
Progetto: modello (2)
• Modello a tuple
– meccanismo di comunicazione e
sincronizzazione
– asimmetrico
– qualità
• persistenza spazi di tuple
• assenza di interferenze
• Modello C/S
– Entità che gestisce gli utenti e il quiz
7
•
•
•
•
Progetto: modello (3)
soluzione distribuita vs centralizzata
1 server
n client
3+n spazi di tuple
– 1 per ogni utente
– 1 per la chat
• chat_room
– 2 per il quiz
• quiz
• pool
8
Progetto: protocollo di
comunicazione (1)
• primitive degli spazi di tuple
– in
– out
– rd
• tuple logiche: strutture dati costituite da
un nome e da una lista di argomenti
– Es. msg(from(Bob),text(ciao))
9
Accesso alla chat
in(join(_,_))
rdAll(user(_,_))
out(join(user(Bob),host(localhost)))
2
1
chat_room
4
bob
in(accepted(_,_))
3
out(accepted(Bob,true))
Invio messaggi
out(msg(from(Bob),host(localhost),text(ciao alice)))
in(msg(_,_,_))
2
1
chat_room
bob
out(msg(from(Bob),host(localhost),text(ciao)))
4
3
in(msg(_,_,_))
alice
Partecipazione al quiz
in(msg(_,_,_))
out(msg(from(Bob),host(localhost),text(quizStart)))
2
1
chat_room
bob
3
quiz
out(user(Bob,host(localhost),score(0),status(online))
Invio domande
out(msg(from(Quiz),host(localhost),text(Chi è il regista di “Marnie”?))
in(msg(_,_,_))
4
3
bob
1
2
pool
quiz
rdAll(user(_,_,_,_))
rd(quiz(question(Chi è il regista di “Marnie”?),answer(Alfred Hitchcock)))
Invio risposta
out(msg(from(Bob),host(localhost),text(Alfred Hitchcock)))
in(msg(_,_,_))
1
chat_room
2
4
3
bob
out(msg(from(Quiz),host(localhost),text(Indovinato…il tuo
punteggio ora è 1)))
quiz
out(user(Bob,host(localhost),score(1),status(online))
Uscita dal quiz
in(msg(_,_,_))
out(msg(from(Bob),host(localhost),text(quizStop)))
2
1
chat_room
bob
3
quiz
out(user(Bob,host(localhost),score(0),status(offline))
Replicazione
• ipotesi di guasto singolo
• Modello a copie calde
– si lavora in parallelo su due nodi in cui ognuno
ha i centri di tuple chat_room, quiz e pool
• Ripristino coerenza
– il nodo riparato rientra solo al successivo
startup
16
Implementazione (1)
• Spazi di tuple
– Tucson
• Java
– portabilità
– interfaccia di accesso a Tucson
17
Implementazione (2)
JFrame
ObserverLeave
ChatAgent
ChatServer
1..*
1
AgentObserverJoin
AgentObserverLeave
QuizManager
AgentObserverMsg
ObserverJoin
Interfaccia
Conclusioni
• Il modello a tuple risulta utile perché
– meccanismo di comunicazione e di
sincronizzazione
– Stato disaccoppiato dai processi
• Sviluppi futuri
– Algoritmo di scelta random e inserimento delle
domande nel centro di tuple pool
– Meccanismo di ripristino coerenza tra i due
nodi
20
Scarica

out