Chat-quiz Reti di Calcolatori L-S AA. 2003/2004 Rossella Rubino
2 Obiettivi realizzare chat-quiz –comunicazione e sincronizzazione –replicazione
3 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.
4 Fasi di sviluppo dell’applicazione Analisi –casi d’uso –scenari Progetto –scelta del modello –protocollo di comunicazione –replicazione Implementazione –linguaggio –sistema di supporto
Analisi: casi d’uso
6 Progetto: modello (1) C/S msg(from(Bob),text(ciao)) …. msg(from(Alice),text(come va?)) … msg(from(Bob),text(ho mal di denti)) … Tuple + client server spazio di tuple
7 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 Progetto: modello (2)
8 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 Progetto: modello (3)
9 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)) Progetto: protocollo di comunicazione (1)
bob chat_room out(join(user(Bob),host(localhost))) in(join(_,_)) rdAll(user(_,_)) out(accepted(Bob,true)) in(accepted(_,_)) Accesso alla chat
bob chat_room out(msg(from(Bob),host(localhost),text(ciao alice))) in(msg(_,_,_)) out(msg(from(Bob),host(localhost),text(ciao))) alice in(msg(_,_,_)) 4 Invio messaggi
bob chat_room out(msg(from(Bob),host(localhost),text(quizStart))) in(msg(_,_,_)) quiz out(user(Bob,host(localhost),score(0),status(online)) Partecipazione al quiz
bob in(msg(_,_,_)) out(msg(from(Quiz),host(localhost),text(Chi è il regista di “Marnie”?)) quiz rdAll(user(_,_,_,_)) pool rd(quiz(question(Chi è il regista di “Marnie”?),answer(Alfred Hitchcock))) 3 Invio domande
bob in(msg(_,_,_)) out(msg(from(Bob),host(localhost),text(Alfred Hitchcock))) 1 3 quiz 2 out(user(Bob,host(localhost),score(1),status(online)) chat_room out(msg(from(Quiz),host(localhost),text(Indovinato…il tuo punteggio ora è 1))) 4 Invio risposta
bob chat_room out(msg(from(Bob),host(localhost),text(quizStop))) in(msg(_,_,_)) quiz out(user(Bob,host(localhost),score(0),status(offline)) Uscita dal quiz
16 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
17 Implementazione (1) Spazi di tuple –Tucson Java –portabilità –interfaccia di accesso a Tucson
Implementazione (2) ChatAgentJFrame AgentObserverLeave ChatServer 11..* AgentObserverJoinAgentObserverMsgObserverLeaveObserverJoinQuizManager
Interfaccia
20 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