#Un client, un server, la cache sullo stesso nodo del server

set ns [new Simulator]

set nf [open outhttp.nam w]
$ns namtrace-all $nf

#topologia
set clie1 [$ns node]
set servcac [$ns node]
$ns duplex-link $clie1 $servcac 1.5Mb 10ms DropTail

$ns rtproto Session

#file di uscita di ns
set log [open "http.log" w]

#generatore di pagine che potranno essere richieste
set pgp [new PagePool/Math]

#generatore delle dimensioni delle pagine
set tmp [new RandomVariable/Constant]           
#valore medio di una pagina
$tmp set val_ 1024                             
$pgp ranvar-size $tmp
#generatore dell'eta' delle pagine
set tmp [new RandomVariable/Exponential]      
#valore medio dell'eta'
$tmp set avg_ 5                                 
$pgp ranvar-age $tmp

#creazione server e collegamento dei server al generatore di pagine
set servera [new Http/Server $ns $servcac]
$servera set-page-generator $pgp
$servera log $log

#creazione della cache
set cache1 [new Http/Cache $ns $servcac]
$cache1 log $log

#creazione del client
set client1 [new Http/Client $ns $clie1]
#processo di Poisson per modellare la sequenza di richieste
set tmp1 [new RandomVariable/Exponential]
#intervallo medio tra due richieste
$tmp1 set avg_ 5
$client1 set-interval-generator $tmp1
$client1 set-page-generator $pgp
$client1 log $log

set startTime 1
set finishTime 180
$ns at $startTime "start-connection"
$ns at $finishTime "finish"

proc start-connection { } {
              global ns servera cache1 client1 
              $client1 connect $cache1
              $cache1 connect $servera
              $client1 start-session $cache1 $servera
                          }
              
proc finish { } {
              global ns log nf
              $ns flush-trace
              flush $log            
              close $log
              close $nf
              exec nam outhttp.nam & 
              exit 0
                }

$ns run










