We have seen all the pieces, now we present a script which provides a complete view of all pieces together. First, we build topology and other usual initializations:
set ns [new Simulator] # Create topology/routing set node(c) [$ns node] set node(e) [$ns node] set node(s) [$ns node] $ns duplex-link $node(s) $node(e) 1.5Mb 50ms DropTail $ns duplex-link $node(e) $node(c) 10Mb 2ms DropTail $ns rtproto Session
Next we create the Http objects:
# HTTP logs set log [open "http.log" w] # Create page pool as a central page generator. Use PagePool/Math set pgp [new PagePool/Math] set tmp [new RandomVariable/Constant] ## Page size generator; $tmp set val_ 1024 ## average page size; $pgp ranvar-size $tmp set tmp [new RandomVariable/Exponential] ## Page age generator; $tmp set avg_ 5 ## average page age; $pgp ranvar-age $tmp set server [new Http/Server $ns $node(s)] ## Create a server and link it to the central page pool; $server set-page-generator $pgp $server log $log set cache [new Http/Cache $ns $node(e)] ## Create a cache; $cache log $log set client [new Http/Client $ns $node(c)] ## Create a client; set tmp [new RandomVariable/Exponential] ## Poisson process as request sequence; $tmp set avg_ 5 ## average request interval; $client set-interval-generator $tmp $client set-page-generator $pgp $client log $log set startTime 1 ## simulation start time; set finishTime 50 ## simulation end time; $ns at $startTime "start-connection" $ns at $finishTime "finish"
Then we define a procedure which will be called after simulation starts. The procedure will setup connections among all Http objects.
proc start-connection {} { global ns server cache client $client connect $cache $cache connect $server $client start-session $cache $server }
At the end, the usual closing:
proc finish {} { global ns log $ns flush-trace flush $log close $log exit 0 } $ns run
This script is also available at ns/tcl/ex/simple-webcache.tcl. Examining its output http.log, one will find that the result of the absense cache consistency algorithm results in a lot of stale hits. This can be easily remedied by replacing ``new Http/Cache'' line with: set cache [new Http/Cache/TTL $ns $node(e)]. For more complicated cache consistency algorithm examples, see ns/tcl/test/test-suite-webcache.tcl.