Strumenti Utente

Strumenti Sito


lpr-a:progetto

Differenze

Queste sono le differenze tra la revisione selezionata e la versione attuale della pagina.

Link a questa pagina di confronto

Entrambe le parti precedenti la revisione Revisione precedente
Prossima revisione
Revisione precedente
lpr-a:progetto [18/12/2009 alle 15:45 (14 anni fa)]
Vincenzo Gervasi
lpr-a:progetto [26/01/2010 alle 18:26 (14 anni fa)] (versione attuale)
Vincenzo Gervasi Ancora FAQ
Linea 54: Linea 54:
 === Fairness === === Fairness ===
 Tentativi di sabotare il server o il protocollo sono lodevoli, ma considerati illegali ai fini dell'esame. È possibile contattare il docente per verificare la "legalità" di una tecnica non ortodossa che si intende usare. È altresì considerato illegale usare nella propria implementazione classi del server o del client di esempio, estratte dal codice fornito. Tentativi di sabotare il server o il protocollo sono lodevoli, ma considerati illegali ai fini dell'esame. È possibile contattare il docente per verificare la "legalità" di una tecnica non ortodossa che si intende usare. È altresì considerato illegale usare nella propria implementazione classi del server o del client di esempio, estratte dal codice fornito.
- 
 ==== Messaggi TCP dal client al server ==== ==== Messaggi TCP dal client al server ====
  
Linea 60: Linea 59:
 ^ Comando ^^ Len ^ Dati ^ Descrizione ^ Risposta ^ ^ Comando ^^ Len ^ Dati ^ Descrizione ^ Risposta ^
 ^ Nome ^ Valore ^ ^ ^ ^ ^ ^ Nome ^ Valore ^ ^ ^ ^ ^
-^ REGISTER | 7 | //n// | //n// caratteri (secondo l'encoding usato dalla classe String di Java), nome //squadra// | registra il client presso il server, iscrivendolo alla //squadra// indicata. Se la //squadra// non esiste viene creata; se alla squadra sono già iscritti il numero massimo di giocatori, la registrazione viene rifiutata (vedi il messaggio di risposta). Il cliente **deve** essere validamente registrato prima che possano essere inviati altri comandi. Una volta registrato, ulteriori comandi **REGISTER** sono invalidi. ^ YOURID |+^ REGISTER | 7 | //n// | //n// bytes (secondo l'encoding usato dalla classe String di Java), nome //squadra// | registra il client presso il server, iscrivendolo alla //squadra// indicata. Se la //squadra// non esiste viene creata; se alla squadra sono già iscritti il numero massimo di giocatori, la registrazione viene rifiutata (vedi il messaggio di risposta). Il cliente **deve** essere validamente registrato prima che possano essere inviati altri comandi. Una volta registrato, ulteriori comandi **REGISTER** sono invalidi. ^ YOURID |
 ^ PING | 1 | 0 | | Segnala al server la propria presenza. ^ PONG | ^ PING | 1 | 0 | | Segnala al server la propria presenza. ^ PONG |
 ^ MOVE | 2 | 4 | //x//,//y// | Chiede al server si portare il giocatore alle coordinate //x//,//y//; il trasferimento può richiedere un tempo significativo, a seconda della distanza; durante tale tempo è possibile inviare altri comandi (inclusi altri MOVE). Giunto a destinazione, il giocatore si ferma automaticamente (fino a un successivo MOVE). ^ | ^ MOVE | 2 | 4 | //x//,//y// | Chiede al server si portare il giocatore alle coordinate //x//,//y//; il trasferimento può richiedere un tempo significativo, a seconda della distanza; durante tale tempo è possibile inviare altri comandi (inclusi altri MOVE). Giunto a destinazione, il giocatore si ferma automaticamente (fino a un successivo MOVE). ^ |
Linea 67: Linea 66:
 ^ LOOK | 5 | 0 | | Chiede al server l'elenco di tutti i target presenti al momento nel campo di gioco. ^ TARGETS | ^ LOOK | 5 | 0 | | Chiede al server l'elenco di tutti i target presenti al momento nel campo di gioco. ^ TARGETS |
 ^ LOAD | 6 | 0 | | Chiede al server il carico corrente del giocatore (quanti target ha raccolto finora). ^ YOURLOAD | ^ LOAD | 6 | 0 | | Chiede al server il carico corrente del giocatore (quanti target ha raccolto finora). ^ YOURLOAD |
- 
 ==== Messaggi TCP dal server al client ==== ==== Messaggi TCP dal server al client ====
  
Linea 77: Linea 75:
 ^ LOC | 65 | 4 | //x//,//y// | Fornisce la posizione corrente del giocatore (coordinate //x//,//y// sul campo di gioco). | ^ LOC | 65 | 4 | //x//,//y// | Fornisce la posizione corrente del giocatore (coordinate //x//,//y// sul campo di gioco). |
 ^ YOURLOAD | 66 | 2 | //n// | Fornisce il carico corrente del giocatore, ovvero quanti target ha raccolto dal momento della registrazione fino ad ora. | ^ YOURLOAD | 66 | 2 | //n// | Fornisce il carico corrente del giocatore, ovvero quanti target ha raccolto dal momento della registrazione fino ad ora. |
-^ TARGETS | 67 | 4//n// | //x//_1,//y//_1 ... //x_n//,//y_n// | Fornisce le coordinate di tutti i target presenti sul campo di gioco. |+^ TARGETS | 67 | 4//n// | //x//<sub>1</sub>,//y//<sub>1</sub> ... //x<sub>n</sub>//,//y<sub>n</sub>// | Fornisce le coordinate di tutti i target presenti sul campo di gioco. |
 ^ GRABRESULT | 68 | 2 | //k// | Segnala che sono stati raccolti //k// target con l'ultimo GRAB (0=nessuno; è possibile che //k//>1 se esistevano più target alle stesse coordinate). | ^ GRABRESULT | 68 | 2 | //k// | Segnala che sono stati raccolti //k// target con l'ultimo GRAB (0=nessuno; è possibile che //k//>1 se esistevano più target alle stesse coordinate). |
- +==== Messaggi Multicast UDP dal server al client ====
-==== Messaggi Multicast UDP dal client al server ====+
  
 | 1 byte || 2 byte | //Len// byte | |  | 1 byte || 2 byte | //Len// byte | | 
Linea 90: Linea 87:
 ==== Comunicazioni intra-client ==== ==== Comunicazioni intra-client ====
 Il protocollo, i formati, e il tipo di comunicazione (tipicamente: TCP, UDP, Multicast o RMI) fra client sono interamente a discrezione dello studente, che dovrà darne documentazione nella relazione. In ogni caso, i vari clienti devono essere istanze dello stesso eseguibile, eseguite su JVM distinte e potenzialmente su macchine diverse. Non è ammessa la comunicazione fra client che utilizzi tecniche diverse dalla comunicazione via rete. Il protocollo, i formati, e il tipo di comunicazione (tipicamente: TCP, UDP, Multicast o RMI) fra client sono interamente a discrezione dello studente, che dovrà darne documentazione nella relazione. In ogni caso, i vari clienti devono essere istanze dello stesso eseguibile, eseguite su JVM distinte e potenzialmente su macchine diverse. Non è ammessa la comunicazione fra client che utilizzi tecniche diverse dalla comunicazione via rete.
- 
 ==== Trattamento degli errori e terminazione ==== ==== Trattamento degli errori e terminazione ====
-Se il server riconosce un errore nel comportamento del client, la comunicazione viene interrotta (il giocatore rimane registrato ma viene "espulso" dal gioco). In caso di errori da parte di un client la squadra continua il gioco con i giocatori rimanenti.+Se il server riconosce un errore nel comportamento del client, la comunicazione viene interrotta (il giocatore rimane registrato ma viene "espulso" dal gioco). Il server segnala tali errori emettendo una eccezione (con l'indicazione del giocatore che ha causato l'errore e del tipo di errore). In caso di errori da parte di un client la squadra continua il gioco con i giocatori rimanenti.
 Il gioco non prevede la possibilità di de-registrare un giocatore, né un esplicito "fine partita"; ogni esecuzione del server corrisponde a una partita, che può essere interrotta in qualunque momento interrompendo il server (da tastiera con Ctrl-C o chiudendo la sua finestra). Il gioco non prevede la possibilità di de-registrare un giocatore, né un esplicito "fine partita"; ogni esecuzione del server corrisponde a una partita, che può essere interrotta in qualunque momento interrompendo il server (da tastiera con Ctrl-C o chiudendo la sua finestra).
 ===== Requisiti generali e modalità di consegna ===== ===== Requisiti generali e modalità di consegna =====
Linea 119: Linea 115:
 verranno ammessi, e lo studente dovrà svolgere un nuovo progetto che verrà pubblicato successivamente. verranno ammessi, e lo studente dovrà svolgere un nuovo progetto che verrà pubblicato successivamente.
  
-I progetti sottomessi verranno testati durante un evento pubblico (la cui data verrà pubblicata nel  +I progetti sottomessi verranno testati durante un evento pubblico il **5 Febbraio 2010 alle 14:00**, durante il quale ogni studente lancerà cinque istanze del proprio client che competeranno con tutti gli altri (eventualmente, con un meccanismo a gironi) su di un unico server attivato dai docenti.    
-mese di gennaio 2010durante il quale ogni studente lancerà cinque istanze del proprio client che competeranno  +
-con tutti gli altri (eventualmente, con un meccanismo a gironi) su di un unico server attivato dai docenti.    +
  
 ===== Suggerimenti finali ===== ===== Suggerimenti finali =====
Linea 128: Linea 122:
   * la correttezza dell'uso delle tecniche di multithreading e di comunicazione di rete;    * la correttezza dell'uso delle tecniche di multithreading e di comunicazione di rete; 
   * il design e l'implementazione dell'eventuale protocollo inter-client;   * il design e l'implementazione dell'eventuale protocollo inter-client;
-  * l'efficienza della soluzione (sia in termini di uso delle risorse che di efficacia della strategia di raccolta)+  * l'efficienza della soluzione (sia in termini di uso delle risorse che di efficacia della strategia di raccolta);
   * la qualità complessiva di scrittura del codice e della relazione.   * la qualità complessiva di scrittura del codice e della relazione.
 Nella parte orale verranno invece verificate le conoscenze teoriche su tutti gli argomenti trattati nel corso. Nella parte orale verranno invece verificate le conoscenze teoriche su tutti gli argomenti trattati nel corso.
  
 Si raccomanda di verificare in anticipo il funzionamento dei client sulle macchine del Centro di Calcolo (Laboratori H-Lab e M-Lab), su cui verrà svolto il "torneo" finale dopo la data di consegna. Si raccomanda altresì di contattare i docenti, a ricevimento o per email, **prima** della consegna in caso di dubbi sull'interpretazione del testo. Si raccomanda di verificare in anticipo il funzionamento dei client sulle macchine del Centro di Calcolo (Laboratori H-Lab e M-Lab), su cui verrà svolto il "torneo" finale dopo la data di consegna. Si raccomanda altresì di contattare i docenti, a ricevimento o per email, **prima** della consegna in caso di dubbi sull'interpretazione del testo.
- 
 ===== FAQ ===== ===== FAQ =====
-(In questa sezione verranno raccolte le risposte alle domande più frequenti).+**È nota la frequenza con cui il server genera i targets e quindi invia messaggi di tipo TARGETS in multicast?** 
 +\\ 
 +No; i target sono comunque generati a intervalli casuali, per cui al limite si potrebbe sapere la frequenza media. Ma quest'ultima è a sua volta determinata dal numero di squadre che stanno giocando in quel momento, quindi... in pratica, sono davvero a caso. 
 + 
 +**Il client con un messaggio di tipo MOVE, chiede al server di portare il giocatore alle coordinate, è possibile sapere la velocità di movimento del giocatore (sarebbe utile per fare dei calcoli)?** 
 +\\ 
 +Al momento è circa di 8-10 unità/secondo, ma anche in questo caso non si tratta di una garanzia (anche perché dipende da quando lo scheduler di Java decide di mettere in esecuzione il thread del server che controlla i movimenti, e su questo non abbiamo alcun controllo). In generale, poiché Java come linguaggio, la JVM e i kernel di Linux e Windows non forniscono alcuna garanzia sulle prestazione real-time, a nostra volta non possiamo darne. È però possibile prendere delle misure in corso di esecuzione (aggiornandole magari man mano) e poi usarle per i propri scopi "previsionali".\\ 
 +Per chi fosse interessato, esiste un progetto per fornire prestazioni real-time con Java, chiamato [[http://java.sun.com/javase/technologies/realtime/index.jsp|Sun Java Real-Time System]]. 
 + 
 +**Posso sabotare i miei concorrenti inviando falsi messaggi sul gruppo broadcast del server?** 
 +\\ 
 +Si; allo stesso modo, i docenti provvederanno a sabotare la tua laurea inviando falsi statini in Segreteria con voti sotto il 18. 
 + 
 +**Come devo gestire il caso in cui altri giocatori inviino messaggi nel gruppo broadcast che uso per far comunicare fra di loro i miei agenti?** 
 +\\ 
 +Prima della gara procederemo a una fase di "DNS manuale" in cui ad ogni studente verrà assegnato, per scopi privati, un gruppo broadcast separato. I client che usino questo tipo di comunicazione devono accettare su riga di comando l'indirizzo IP da usare a tale scopo. È illegale inviare pacchetti broadcast su qualunque gruppo, tranne quello assegnato. In particolare, non si possono inviare pacchetti broadcast sul gruppo usato dal server (vedi FAQ precedente). 
 + 
 +**Posso consegnare più eseguibili diversi (uno per ogni giocatore/uno o più per scopi di coordinamento)?** 
 +\\ 
 +No; la modalità di consegna prevede un solo eseguibile. Nulla vieta che questo eseguibile abbia poi comportamenti diversi a seconda dei casi (l'ID unico assegnato dal server a ogni giocatore può essere usato per discriminare questi comportamenti). Allo stesso modo, non è possibile mandare in esecuzione altri processi, distinti dall'unico eseguibile di cui sopra. L'unica eccezione ammessa è il processo rmiregistry per i progetti che ne necessitino. 
 + 
 +**Ma come faccio a essere sicuro che i pacchetti che mando arrivino al server coi tempi "giusti"? Io li invio coi tempi giusti, però...** 
 +\\ 
 +Non puoi. È nella natura della programmazione di rete il fatto che, nella maggior parte dei casi, non è possibile dare garanzie statiche sui tempi di consegna dei pacchetti (e anche laddove la rete lo consentirebbe, le incertezze sullo scheduler dei thread in Java non consentono di sapere quando il pacchetto verrà effettivamente letto dal server). Il problema, di suo, è insolubile e ineliminabile: è però possibile prendere tutta una serie di provvedimenti per alleviarlo, e ci si attende che i tuoi client non siano dichiarati nè spammy, nè morti di sonno. 
lpr-a/progetto.1261151136.txt.gz · Ultima modifica: 18/12/2009 alle 15:45 (14 anni fa) da Vincenzo Gervasi