📄 web.tcl
字号:
source ../../../ex/asym/util.tclset WebCScount 0Class WebCSproc createTransfer {ns src dst tcpargs tcptrace sinkargs session sessionargs doneargs xfersz} { set tcp [eval createTcpSource $tcpargs] $tcp proc done {} " $doneargs" if {$xfersz < 1} { $tcp set packetSize_ [expr int($xfersz*1000)] } set sink [eval createTcpSink $sinkargs] set ftp [createFtp $ns $src $tcp $dst $sink] if {$session} { set newSessionFlag false set newSessionFlag [eval setupTcpSession $tcp $sessionargs] setupTcpTracing $tcp $tcptrace $newSessionFlag } setupTcpTracing $tcp $tcptrace $session return $ftp}proc numberOfImages {} { global numimg return $numimg}proc htmlRequestSize {} { global reqsize return $reqsize}proc htmlReplySize {} { global htmlsize return $htmlsize}proc imageRequestSize {} { global reqsize return $reqsize}proc imageResponseSize {} { global imgsize return $imgsize}WebCS instproc init {ns client server tcpargs tcptrace sinkargs {phttp 0} {httpseq 0} {session false} {sessionargs ""}} { $self instvar ns_ $self instvar ftpCS1_ ftpCS2_ $self instvar ftpSC1_ ftpSC2_ $self instvar numImg_ htmlReqsz_ htmlReplsz_ imgReqsz_ imgReplsz_ $self instvar numImgRecd_ numImgRepl_ $self instvar numImgReq_ $self instvar starttime_ endtime_ $self instvar phttp_ httpseq_ session_ $self instvar finish_ global WebCScount incr WebCScount set ns_ $ns set phttp_ $phttp set httpseq_ $httpseq set session_ $session # compute transfer sizes set numImg_ [numberOfImages] set htmlReqsz_ [htmlRequestSize] set htmlReplsz_ [htmlReplySize] set imgReqsz_ [imageRequestSize] set imgReplsz_ [imageResponseSize] # create "ftp's" for each transfer set ftpCS1_ [createTransfer $ns $client $server "TCP/Newreno" $tcptrace $sinkargs $session $sessionargs "$self htmlReqDone" $htmlReqsz_] set ftpSC1_ [createTransfer $ns $server $client $tcpargs $tcptrace $sinkargs $session $sessionargs "$self htmlReplDone" $htmlReplsz_] # XXX assume request to be of fixed size regardless of numImg_ # unless HTTP with sequential connections is being employed if {$httpseq} { set numImgReq_ $numImg_ for {set i 0} {$i < $numImg_} {incr i 1} { set ftpCS2_($i) [createTransfer $ns $client $server "TCP/Newreno" $tcptrace $sinkargs $session $sessionargs "$self imgReqDone" $imgReqsz_] } } else { set numImgReq_ 1 set ftpCS2_(0) $ftpCS1_ } for {set i 0} {$i < $numImg_} {incr i 1} { if {$phttp} { set ftpSC2_($i) $ftpSC1_# if {$i == 0} {# set ftpSC2_($i) [createTransfer $ns $server $client $tcpargs $tcptrace $sinkargs $session $sessionargs "$self imgReplDone" $imgReplsz_]# } else {# set ftpSC2_($i) $ftpSC2_(0)# } } else { set ftpSC2_($i) [createTransfer $ns $server $client $tcpargs $tcptrace $sinkargs $session $sessionargs "$self imgReplDone" $imgReplsz_] } }}WebCS instproc start {} { $self instvar ns_ $self instvar ftpCS1_ ftpCS2_ $self instvar ftpSC1_ ftpSC2_ $self instvar numImg_ htmlReqsz_ htmlReplsz_ imgReqsz_ imgReplsz_ $self instvar numImgRecd_ numImgRepl_ $self instvar numImgReq_ $self instvar starttime_ endtime_ $self instvar phttp_ httpseq_ session_ set starttime_ [$ns_ now] set numImgRecd_ 0 set numImgRepl_ 0 if {$htmlReqsz_ < 1} { $ftpCS1_ producemore 1 } else { $ftpCS1_ producemore $htmlReqsz_ }}WebCS instproc htmlReqDone {} { $self instvar ns_ $self instvar ftpCS1_ ftpCS2_ $self instvar ftpSC1_ ftpSC2_ $self instvar numImg_ htmlReqsz_ htmlReplsz_ imgReqsz_ imgReplsz_ $self instvar numImgRecd_ numImgRepl_ $self instvar numImgReq_ $self instvar starttime_ endtime_ $self instvar phttp_ httpseq_ session_ $ftpSC1_ producemore $htmlReplsz_}WebCS instproc htmlReplDone {} { $self instvar ns_ $self instvar ftpCS1_ ftpCS2_ $self instvar ftpSC1_ ftpSC2_ $self instvar numImg_ htmlReqsz_ htmlReplsz_ imgReqsz_ imgReplsz_ $self instvar numImgRecd_ numImgRepl_ $self instvar numImgReq_ $self instvar starttime_ endtime_ $self instvar phttp_ httpseq_ session_ [$ftpCS1_ agent] proc done {} "$self imgReqDone" [$ftpSC1_ agent] proc done {} "$self imgReplDone" if {$imgReqsz_ < 1} { $ftpCS2_($numImgRecd_) producemore 1 } else { $ftpCS2_($numImgRecd_) producemore $imgReqsz_ }}WebCS instproc imgReqDone {} { $self instvar ns_ $self instvar ftpCS1_ ftpCS2_ $self instvar ftpSC1_ ftpSC2_ $self instvar numImg_ htmlReqsz_ htmlReplsz_ imgReqsz_ imgReplsz_ $self instvar numImgRecd_ numImgRepl_ $self instvar numImgReq_ $self instvar starttime_ endtime_ $self instvar phttp_ httpseq_ session_ if {$httpseq_} { $ftpSC2_($numImgRepl_) producemore $imgReplsz_ incr numImgRepl_ } else { for {} {$numImgRepl_ < $numImg_} {incr numImgRepl_ 1} { $ftpSC2_($numImgRepl_) producemore $imgReplsz_ } }} WebCS instproc imgReplDone {} { $self instvar ns_ $self instvar ftpCS1_ ftpCS2_ $self instvar ftpSC1_ ftpSC2_ $self instvar numImg_ htmlReqsz_ htmlReplsz_ imgReqsz_ imgReplsz_ $self instvar numImgRecd_ numImgRepl_ $self instvar numImgReq_ $self instvar starttime_ endtime_ $self instvar phttp_ httpseq_ session_ incr numImgRecd_ if {($numImgRecd_ == $numImg_) || $phttp_} { $self end } elseif {$httpseq_} { $self htmlReplDone }}WebCS instproc end {} { $self instvar ns_ $self instvar ftpCS1_ ftpCS2_ $self instvar ftpSC1_ ftpSC2_ $self instvar numImg_ htmlReqsz_ htmlReplsz_ imgReqsz_ imgReplsz_ $self instvar numImgRecd_ numImgRepl_ $self instvar numImgReq_ $self instvar starttime_ endtime_ $self instvar phttp_ httpseq_ session_ $self instvar finish_ global WebCScount set endtime_ [$ns_ now] puts -nonewline stderr "[format "%.3f " [expr $endtime_ - $starttime_]]" if {$phttp_} { set nrexmit [[$ftpSC2_(0) agent] set nrexmit_] } elseif {$session_} { set nrexmit [[[$ftpSC2_(0) agent] session] set nrexmit_] } else { set nrexmit 0 for {set i 0} {$i < $numImg_} {incr i} { incr nrexmit [[$ftpSC2_($i) agent] set nrexmit_] } } puts -nonewline stderr "$nrexmit " flush stderr incr WebCScount -1 if {$WebCScount == 0} { eval "$finish_" }# $ns_ at [expr [$ns_ now] + 3] "$self start"# [$ftpCS1_ agent] proc done {} "$self htmlReqDone"# [$ftpSC1_ agent] proc done {} "$self htmlReplDone"}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -