Simple presentation on Twisted fundamentals.
Originally part 4 of a 4 lectures seminar for the Networking class of the Computer Science course at the University of Parma
6. Modelli Pratici
Modello a Processi
fork(), ...
Buona protezione, buona
efficienza, non sempre
facilissimo
7. Modelli Pratici
Modello a Processi
fork(), ...
Buona protezione, buona
efficienza, non sempre
facilissimo
Modello a Thread
pthreads, Java
Nessuna protezione (a meno
che Queues), efficienza non
buona (su macchine
multicore), parecchio
complesso
8. Modelli Pratici
Modello a Processi Modello ad Eventi
fork(), ... “select”, Twisted, ACE,
Buona protezione, buona GUI (ma non per I/O)
efficienza, non sempre Protezione totale
facilissimo Ottima efficienza (a
Modello a Thread patto...)
pthreads, Java Più complesso da capire
Nessuna protezione (a meno la prima volta, semplifica il
che Queues), efficienza non lavoro dopo
buona (su macchine
Prima di Twisted, n-mila
multicore), parecchio
complesso interfacce
9. Concetti Base
La logica dietro a Twisted non è dissimile
da quella dietro le GUI
Reactor (run-loop)
Eventi di I/O invece che “bottone premuto”
Ma in effetti si integra perfettamente con le
GUI (Qt, Windows, Cocoa, Tk, ...)
Quando accade x, tu fai f(x), se questo va
male fai error(x).
11. Reactor
Nucleo di un programma Twisted:
Il programma descrive come reagire agli
eventi
Quando accade qualcosa, il reactor
“reagisce”
Molti reactor (a seconda della piattaforma)
select, poll, epoll, kqueues, win-stuff
12. Deferred
Un oggetto deferred è un “segnaposto”
che sta per qualcosa di cui non
conosciamo ancora il valore.
Agganciamo callback ed errback
Quando abbiamo il valore, le callback (o le
errback) sono chiamate
Il concetto di deferred è completamente
centrale a Twisted
13. Implementare...
Tipicamente per implementare un protocollo
definiamo:
Un Protocol, che descrive il protocollo
Una Factory, che genera un nuovo Protocol per
ogni client
Non c’è problema di deadlock/race conditions:
è tutto sequenziale asincrono
Fortunatamente la maggior parte dei protocolli
sono stati implementati: poche linee di codice
creano un servente di classe enterprise
14. Buttiamoci...
Cominciamo da un esempio “facile facile”
Scriviamo un semplice client e server
SMTP
Last but not least (se il tempo lo permette):
Sistema di Autenticazione/Validazione
Perspective Broker (RPC “Python Way”)
Condivisione diretta di oggetti!
XMLRPC a gogo.
15. 1. Credentials
list of interfaces 2. Credentials
Credentials
3. Avatar ID Checker
Portal
4. Avatar ID
list of interfaces
Realm
6. Avatar matching 5. Avatar ID
interface matching interfaces
Autenticazione
16. Entità (1)
Credentials
Informazioni utilizzate per identificare e
autenticare un utente (es. username e
password)
Avatar
Un oggetto sul server che “fa cose per
conto dell’utente”
Avatar ID
Una chiave per ottenere un avatar
17. Entità (2)
Credentials Checker
Prende delle credenziali e le verifica.
Ritorna un Avatar ID
Realm
Da accesso a tutti gli avatar: prende un
avatar id e restituisce un avatar
Portal
Unisce un realm con un insieme di
credential checkers