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 /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 /tcl/test/test-suite-webcache.tcl.